2011-05-31 94 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

相关问题