我想通过网络发送一个仅由数值组成的字符数组,但是在收到它之后,这个数字会比以前更长一些字符。
例如我发送:
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;
}
答案 0 :(得分:1)
您在非空终止的缓冲区上使用strlen()
,因此它最终会运行到垃圾数据中。我没有看到你的代码的哪一部分打印出来&#34; strlen size 24&#34 ;,但我认为它要么以其他方式获取长度,要么堆恰好在那个时候字符串的结尾。
使toCharArray
函数正确无效 - 终止它创建的字符串。