将char数组的一部分复制到c中的字符串

时间:2011-05-31 22:48:47

标签: c string segmentation-fault arrays

我已阅读了许多建议的问题,但仍无法找到答案。我知道缓冲区中的内容是以NULL结尾的char array,我想将其复制到动态分配的char array中。但是,我一直从strcpy函数中获得分段错误。谢谢你的帮助。

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);,但没有任何效果!!

2 个答案:

答案 0 :(得分: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);

答案 1 :(得分: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)依赖空字符来终止字符串。