2014-01-29 24 views
0

我有一個關於連接C中的兩個字符串以說「Ring Ding」的問題我有一個char * d,它是malloc 14 * sizeof(char)只是爲了保持安全的一面在最後的字符\,但我的功能仍然segfaulting,我不知道爲什麼。它說我不能隱式定義strcopy。我想我的問題是我不能出來說「戒指」,但我可能會誤解。在C語言中連接字符串隱式定義

char * k = malloc(14*sizeof(char)); 
strcopy(k, "Ring"); 
strcat(k, "Ding"); 
printf("%s\n", k); 
+2

'strcopy'應該是'strcpy'。你確定代碼是段錯誤嗎?這是一個運行時問題,我希望你的代碼無法鏈接,讓你沒有程序運行。 – simonc

+0

只是將其從strcopy更改爲strcpy修復它!謝謝! – user1837411

+0

如果您修復了錯字,那麼您顯示的代碼應該可以安全地運行,而不會發生核心轉儲,除非事先進行了極端的內存分配並且空間不足。你應該檢查內存分配,但假設有效,其餘的應該也可以。所以,如果問題不在這個代碼中,那麼它可能在你的程序的其他地方 - 那麼你的代碼還在做什麼? –

回答

0

我希望這段代碼能幫到你!

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

int main() 
{ 
    char * k = (char*)malloc(14*sizeof(char)); 
    strcpy(k, "Ring"); 
    strcat(k, "Ding"); 
    printf("%s\n", k); 
    return 0; 
} 
+2

'void main()'應該是'int main(void)'。 '(char *)'強制轉換是不必要的,並且是不好的練習。沒有額外解釋的代碼轉儲不是一個好的答案。您所做的只是添加所需的'#include'指令和'main'函數並修正拼錯的函數名稱。 –

1

'strcopy'有一個錯字;它通常是來自string.h的'strcpy'

由於C允許你在沒有首先聲明它們的情況下調用函數,所以你得到'隱式聲明'的警告,因爲它沒有找到int string.h。

我很驚訝你能夠運行程序,因爲你應該有一個鏈接器錯誤,因爲它無法找到函數的定義。

如果您修復了錯字,它應該編譯並運行正常。我也推薦使用這些字符串函數(strlcpy,strlcat等)的strl *版本 - 它更安全;請參閱手冊頁。

+1

另外值得指出的是'strl *'函數是非標準的,可能並不適用於所有系統。 –

+0

(關於使用'strn *'家族的強制性註釋) –

0

假設您有:

char* str1 = "Ring"; 
char* str2 = "Ding"; 

按照以下步驟(作爲一般規則):

// Function 'strlen' always returns the length excluding the '\0' character at the end 
// The '+1' is because you always need room for an additional '\0' character at the end 
char* k = (char*)malloc(strlen(str1)+strlen(str2)+1); 

// Write "Ring\0" into the memory pointed by 'k' 
strcpy(k,str1); 

// Write "Ding\0" into the memory pointed by 'k', starting from the '\0' character 
strcat(k,str2); 

// Print the memory pointed by 'k' until the '\0' character ("RingDing") to the console 
printf("%s\n",k); 

// De-allocate the memory pointed by 'k' 
free(k); 
+1

不要強制轉換'malloc'的結果。 –