我有这样的数组:
char *family[3] ={"son", "father", "sister"};
我希望使用函数strcat(son," ");
将每个元素的长度对齐到相同的大小,但我会转而使用核心转储。
答案 0 :(得分:3)
你不能strcat()
为文字。而后者就是三个“字符串”。
文字放在只读内存中。它们可能不会被覆盖,尝试这样做会导致运行时错误。
答案 1 :(得分:0)
我认为你试图写这样的东西:
char family[3][MAX_LEN] = {"son", "father", "sister"};
strcat (family[i], " ");
“家庭”与原文定义的差异:
char *family[3] ={"son", "father", "sister"};
在这里你有3个指向3个文字const字符串的指针是只读的。因此,您无法使用strcat修改它们。
而在char s[3][L]={"a","b","c"}
上,您在堆栈中分配3个长度为L的char数组,并将它们初始化为3个文字。所以现在你可以用strcat修改它们,如果L足够大......
另外,你正在以错误的方式使用strcat(),因为@alk指出了......
答案 2 :(得分:0)
strcat()
将源字符串的副本附加到目标字符串的末尾,包括终止的ASCII NUL字节。要追加的字符串的初始字符将覆盖目标字符串末尾的NUL字节。
因此,您不能将“son”设置为目标字符串,因为它是文字字符串
`strcat(family [0],“”);你正在尝试做什么,但这不会因为family [0]已设置为“son \ 0 \ 0 \ 0 \ 0”而导致缓冲区溢出。
请改为:
char *family[3] ={"son ", "father", "sister"};//now family[0] is initialized with spaces to match length
//(and strcat() statment is not needed)