我想通过网络发送一个仅由数值组成的字符数组,但收到后,该数字比以前更长,并且多了一些字符。
例如我发送:
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 * 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;
}
最佳答案
您在非空终止的缓冲区上使用 strlen()
,因此它会从末尾运行到垃圾数据中。我看不到代码的哪一部分打印了“strlen size 24”,但我认为它要么以其他方式获取长度,要么堆恰好在该点的字符串末尾有一个空值。
使您的 toCharArray
函数正确地以 null 结尾它创建的字符串。
关于C - 通过网络发送后字符数组更长,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27091293/