char数组的交换元素可以工作,但交换char字符串的元素会导致核心转储

时间:2015-06-03 16:50:14

标签: c arrays string

我正在尝试执行交换操作,如下面的程序所示,但是当我将元素b复制到(swap()方法中的第3行)时似乎崩溃 - 如果输入是char字符串,则会发生这种情况,即,char * str;如果它是一个字符数组(如在char str [];中),则交换操作正常。

var h = 100;

我认为这与我似乎没有意识到的一些C字符串规则有关。请帮忙!

3 个答案:

答案 0 :(得分:4)

字符串文字是只读,尝试修改字符串文字导致未定义的行为

最简单的解决方案?将其声明为数组:

char str[] = "abc";

答案 1 :(得分:0)

char *str = "abc";

上面将字符串放在程序的常量数据部分(也称为.rdata)中。由于这被视为常量数据,因此无法修改

char str[] = "abc";

上面将字符串放在程序的堆栈区域中,如在函数范围内声明的那样。可以修改此数据。

由于这是关于字符串数据的存储,因此您在第一次声明时遇到崩溃。

答案 2 :(得分:0)

'char * str =“abc”;' 以上将abc放在只读存储器中。所以它无法修改。 'char str [] =“abc”;'放在堆栈中。所以可以修改。