使用strcat向char **元素添加空间

时间:2013-12-02 15:50:52

标签: c arrays char strcat

我有这样的数组:

char *family[3] ={"son", "father", "sister"};

我希望使用函数strcat(son," ");将每个元素的长度对齐到相同的大小,但我会转而使用核心转储。

3 个答案:

答案 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)