【发布时间】:2013-12-02 15:50:51
【问题描述】:
我得到了这样的数组:
char *family[3] ={"son", "father", "sister"};
我想通过使用函数strcat(son," "); 将每个元素的长度对齐到相同的大小,但我得到了核心转储。
【问题讨论】:
-
改用
asprintf。
我得到了这样的数组:
char *family[3] ={"son", "father", "sister"};
我想通过使用函数strcat(son," "); 将每个元素的长度对齐到相同的大小,但我得到了核心转储。
【问题讨论】:
asprintf。
您不能将strcat() 转换为文字。而后者就是这三个“字符串”是什么。
文字被放置在只读内存中。它们可能不会被覆盖,尝试这样做会导致运行时错误。
【讨论】:
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)
【讨论】:
char*[] 示例中也有 "room"不管怎样,你给。
char * family[3] = {"son\0\0\0\0",... 有“空间”,需要用空格和strcat() 填充将失败。问题不在于内存不足或足够(“空间”)。
我认为你试图写这样的东西:
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 足够大......
另外,正如@alk 指出的那样,你以错误的方式使用 strcat()...
【讨论】: