2011-05-31 91 views
2

我已經閱讀了許多建議的問題,但仍無法找到答案。我知道緩衝區中的內容是NULL終止的char array,我想將它複製到動態分配的char array。但是,我一直在從strcpy函數中獲得分段錯誤。謝謝你的幫助。將char數組的一部分複製到c中的字符串中

void myFunction() 
{ 
    char buffer[200]; 

    // buffer was filled by recvfrom correctly, and can be printed out with printf() 
    char *message = malloc(200); 

    strcpy(message, buffer[1]); 
} 

////////////////

好了,我試過strcpy(message, &buffer[1]); strcpy(message, buffer);但沒有工作!

+5

殺青你的編譯器的警告級別和**介意的警告!** – pmg 2011-05-31 22:51:10

+3

的strcpy的'第二個參數()'也應該是'[常量]字符*',緩衝。它目前是緩衝區的第二項,一個'char'。 – 2011-05-31 22:51:27

+0

所以應該是strcpy(message,&buffer [1])? – derrdji 2011-05-31 22:56:15

回答

1

您調用strcpy(3)不正確。它更改爲以下:

buffer[199] = '\0'; 
    strcpy(message, &buffer[1]); 

strcpy(3)具有以下特徵:

char * 
stpcpy(char *s1, const char *s2); 

您在傳遞:

char *stpcpy(char *s1, const char s2); /* won't work */ 

我會建議使用memcpy(3)代替strcpy(3)因爲strcpy(3)依靠空字符來終止字符串。

2

這適用於我。是否有可能您的緩衝區不是空終止的?

char buffer[200]; 
buffer[0] = 'h'; 
buffer[1] = 'e'; 
buffer[2] = 'l'; 
buffer[3] = 'l'; 
buffer[4] = 'o'; 
buffer[5] = '\0'; 

// buffer was filled by recvfrom correctly, and can be printed out with printf() 
char *message = (char *)malloc(200); 
strcpy(message, buffer); 
+0

我可以做printf(「message is:%s」,buffer);並且它正確地打印出我使用sendto發送的消息。我肯定緩衝區包含正確的c字符串 – derrdji 2011-06-01 01:13:25

相關問題