d**f 发帖数: 264 | 1 void swap( char* cA, char* cB)
{
char ct = *cA;
*cA = *cB;
*cB = ct;
}
int main(int argc, char* argv[])
{
char *a = "a";
char *b = "b";
swap(a, b);
}
貌似问题出在 *cA = *cB;?
如果是char a = 'a'; char b = 'b'; swap(&a,&b);不会有segment fault. | d**e 发帖数: 6098 | 2 前面ihasleetcode有个贴应该也解释过类似的。
char * a = "a"
定义的是一个c-string constant,不能修改它的值。所以在swap就出现segment fault
了。
【在 d**f 的大作中提到】 : void swap( char* cA, char* cB) : { : char ct = *cA; : *cA = *cB; : *cB = ct; : } : int main(int argc, char* argv[]) : { : char *a = "a"; : char *b = "b";
| r****o 发帖数: 1950 | 3
a and b are stored as literal string so you cannot change them.
...................
【在 d**f 的大作中提到】 : void swap( char* cA, char* cB) : { : char ct = *cA; : *cA = *cB; : *cB = ct; : } : int main(int argc, char* argv[]) : { : char *a = "a"; : char *b = "b";
| d**f 发帖数: 264 | 4 是这个问题,比如
char *a = "hi"; a[0] = 'y'; 会报错
如果定义成 char[] = "hi"; 就没有问题. | d**f 发帖数: 264 | 5 K&R C 原话是这么说的,P104
pmessage is a pointer, initialized to point to a string constant; the
pointer may subsequently be modified to point elsewhere, but the result is
undefined if you try to modify the string contents. | P***P 发帖数: 1387 | 6 主要还不是string的问题
你这个程序基本没有对的地方,
就算都把char改成int还是错
人家gcc编译的时候都把warning给你了还不知道要改 | d**f 发帖数: 264 | 7 程序是没有问题的,问题出在C++
const char* c = "hi";
前面那个const是implicit.
char c[] = "hi";
也不好,这个要depends on compiler.
所以最好的办法是,C++下直接用string
尽量少用cstring. | d**f 发帖数: 264 | 8 从这里出发,我又想到好多东西.
第一个就是 char ** p 和 char * a[]. p, p+1, *p, *(p+1)与a, a[0], a[1]在函数
传递的时候到底有什么不同.
第二个就是 int ** p 和 int a[][], 2D Array where column and row are both
unknown,到底应该怎样传递.
第三个是怎样去实现一个高效简单的2D Dynamic Array?
第二个问题的来源是,面试的时候,我被问到一个常见的题目:
find a int in a 2D array. column and row are sorted.
int a[M][N] = {}; //M and N could be any numbers.
How to pass 'a' into your function? |
|