如何使用带有未指定长度的char *的strcat

时间:2012-11-03 18:50:56

标签: c strcat

#include <stdio.h>
#include <string.h>

char* changeString(char *inputString);

int main() {
   printf("Changed string is %s\n", changeString("42"));
}

char* changeString(char *inputString) {
    static const char* someStrings[3] = {"abc", "def", "ghi"};
    char* output;
    strcat(output, someStrings[1]);
    return output;
}

我正在尝试将char*附加到另一个char*,但strcat会导致分段错误,因为char*没有大小,正在更改{{1} }} char* output;修复了分段错误,但后来我输入了错误的类型,我无法在char output[100];中打印答案。

非常感谢任何建议。

编辑:我知道上面的例子似乎没有任何价值,我改变它来演示我正在使用的逻辑。

4 个答案:

答案 0 :(得分:6)

您尚未为输出字符串分配内存。使用malloc()分配内存,然后尝试strcat。

答案 1 :(得分:1)

您可以动态分配内存,或者保留一个可以传递给调用者的静态存储(但如果您愿意,那么您的程序将不是线程安全的。)

   static char output[100];

答案 2 :(得分:1)

变量output不指向任何内容并且具有未定义的值。您收到的错误是因为您正在尝试写入该未知地址。

首先,您必须为输出字符串分配一些内存。

答案 3 :(得分:0)

您正在一段未分配的内存中写入信息。使用malloc分配一些内存,然后使用strncat确保它不会超出范围:

char* output;
output = (char *)malloc(100*sizeof(char));
output[0] = '\0';
strncat(output, someStrings[1], 100);

然后,当您完成output结果后,请调用free()将内存返回给系统。请注意,你在这里处理复杂的事情。不要轻易考虑动态内存分配。

请参阅联机帮助页以获取更多信息。或者:http://en.wikipedia.org/wiki/C_dynamic_memory_allocation