我正在尝试执行交换操作,如下面的程序所示,但是当我将元素b复制到(swap()方法中的第3行)时似乎崩溃 - 如果输入是char字符串,则会发生这种情况,即,char * str;如果它是一个字符数组(如在char str [];中),则交换操作正常。
var h = 100;
我认为这与我似乎没有意识到的一些C字符串规则有关。请帮忙!
答案 0 :(得分:4)
字符串文字是只读,尝试修改字符串文字导致未定义的行为。
最简单的解决方案?将其声明为数组:
char str[] = "abc";
答案 1 :(得分:0)
char *str = "abc";
上面将字符串放在程序的常量数据部分(也称为.rdata)中。由于这被视为常量数据,因此无法修改
char str[] = "abc";
上面将字符串放在程序的堆栈区域中,如在函数范围内声明的那样。可以修改此数据。
由于这是关于字符串数据的存储,因此您在第一次声明时遇到崩溃。
答案 2 :(得分:0)
'char * str =“abc”;' 以上将abc放在只读存储器中。所以它无法修改。 'char str [] =“abc”;'放在堆栈中。所以可以修改。