0
#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;
}

我正在尝试将 a 附加char*到另一个上,char*但是由于没有大小,strcat因此不断导致分段错误,更改为修复分段错误,但是我返回了错误的类型,并且无法在.char*char* output;char output[100];printf

任何建议将不胜感激。

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

4

4 回答 4

6

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

于 2012-11-03T18:52:54.607 回答
1

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

   static char output[100];
于 2012-11-03T18:55:29.597 回答
1

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

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

于 2012-11-03T18:57:09.750 回答
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

于 2012-11-03T18:55:07.133 回答