2012-11-03 27 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不指向任何東西,有一個未定義的值。您收到的錯誤是因爲您正在嘗試寫入該未知地址。

首先,您必須爲輸出字符串分配一些內存。

相關問題