C - 通过网络发送后字符数组更长

标签 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 * 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/

相关文章:

c - "Hacking: The Art of Exploitation": why does example program work with just gcc but not with -m32?

c - 是否可以在 C 中合并 stderr 和 stdout?

#define 可以包含以前定义的变量吗?

在 C 中将 char* 转换为 wchar*

python - 如何更改列表中的值并创建新列表

arrays - 检查列表和数组是否相等 F#

c - 使用环境变量的缓冲区溢出

java - java switch 中的多个参数

java - 不使用 getNumericValue 将 Char 转换为其数值

c++ - 当数据在 C++ 中不一致时,将文本文件中的数据读入二维数组