2012-11-03 25 views
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; 
} 

我想追加一个char*到另一个char*但是strcat保持导致分割故障,因为char*没有大小,改变char* output;char output[100];修复分段错误,但是我返回了错误的类型,我无法打印printf中的答案。如何使用strcat的与未指定长度的字符*

任何意见将不胜感激。

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

+1

“* ...试图将char ** *追加到另一个char ** ......”:'char *'是一个指向字符的指针。追加一个指向另一个没有意义。 – alk

回答

5

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

+3

+1。还值得注意的是,将输出更改为char数组并返回指向本地数组的指针并不是一个好主意。 –

+0

如果它符合目的,这是一个可能的解决方案,它本身不是一个“不好的主意”。 (这只是在绝大多数真实世界的场景中不是更好的选择,但这是另一回事) – ShinTakezou

+1

@ShinTakezou我想你忽略了“并返回**指针到本地数组**”。这本身并不是一个好主意。 (当然,你的答案中有一个_static_数组。) –

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

1

你可以动态地分配内存,或者保留一个静态存储器,你可以传给调用者(但是如果你在意你的程序不会是线程安全的)。

static char output[100]; 
1

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

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

相关问题