#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];
中打印答案。
非常感谢任何建议。
编辑:我知道上面的例子似乎没有任何价值,我改变它来演示我正在使用的逻辑。
答案 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