通过网络发送后,C-char数组更长

时间:2014-11-23 16:28:22

标签: c char arrays

我想通过网络发送一个仅由数值组成的字符数组,但是在收到它之后,这个数字会比以前更长一些字符。

例如我发送:

579858766387684363076422
strlen size 24
char[] prints correct here

但我收到的是:

Got message: 579858766387684363076422 with length 27 
strlen size 27
(also there appear special characters in console at the end)

我的发送代码:

char *aArray = toCharArray(&alpha);

// write to client
n = write(newsockfd, aArray, strlen(aArray));
if (n < 0) 
    error("ERROR writing to socket");

我的接收代码:

n = read(sockfd, buffer, 512);
if (n < 0) 
    error("ERROR reading from socket");
printf("Got message: %s with length %d\n", buffer, n);

有谁知道最近发生了什么?顺便提一下,我是C的初学者。

如果有人想看一下,这就是我从数组中生成char数组的方法:

char * toCharArray(largenum *num) {
    char *output = malloc(sizeof(char) * num->size);
    for (int i = 0 ; i < num->size; ++i)
    {
        output[i] = num->digits[i] + '0';
    }
    return output;
}

1 个答案:

答案 0 :(得分:1)

您在非空终止的缓冲区上使用strlen(),因此它最终会运行到垃圾数据中。我没有看到你的代码的哪一部分打印出来&#34; strlen size 24&#34 ;,但我认为它要么以其他方式获取长度,要么堆恰好在那个时候字符串的结尾。

使toCharArray函数正确无效 - 终止它创建的字符串。