我得到了这样的数组:
char *family[3] ={"son", "father", "sister"};
我想通过使用函数strcat(son," ");
将每个元素的长度对齐到相同的大小,但我得到了转储的核心。
不能将D_2 strcat()
转换为文字。后者就是三根"弦"。
文字被放在只读存储器中。它们可能不会被覆盖,尝试这样做会导致运行时错误。
strcat()
将源字符串的副本附加到目标字符串的末尾,包括终止的ASCII NUL字节。要附加的字符串的初始字符将覆盖目标字符串末尾的NUL字节。
因此,您不能将"son"设置为目标字符串,因为它是一个文字字符串,
`strcat(家族[0],");是您想要做的,但这也不会起作用,因为family[0]已经设置为"son\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)
我想你正试图写这样的东西:
char family[3][MAX_LEN] = {"son", "father", "sister"};
strcat (family[i], " ");
关于"家庭"定义与原文的差异:
char *family[3] ={"son", "father", "sister"};
这里有3个指针指向3个只读的常量字符串。因此,您无法使用strcat修改它们。
而在char s[3][L]={"a","b","c"}
上,您在堆栈中分配3个长度为L的char数组,并将它们初始化为3个文字。所以现在你可以用strcat修改它们,如果L足够大。。。
此外,正如@alk所指出的,您使用strcat()的方式是错误的。。。