我正在尝试从套接字读取char数组,并获取整数值,然后可以在for循环中使用该整数值。很遗憾,我在atoi()遇到了分段错误。我做错什么了?
bytesRead = read(sock, buffer, 1024);
buffer[bytesRead] = '\0';
char tmp[bytesRead]; // I suspect creating this shorter
strncpy(tmp, buffer, bytesRead); // array is not necessary... but not sure.
int num = atoi(tmp);
最佳答案
要确保tmp
是一个C-“字符串”,即携带0
终止符。更改以下内容:
char tmp[bytesRead];
成为
char tmp[bytesRead + 1] = "";
上面的修改做了两件事:
再分配一个字节,然后使用。
将所有字节设置为零。
因此,如果通过调用
bytesRead
覆盖第一个strncpy()
字节,则最后一个字节保持不变,并继续保持'\0'
,即它0
-终止char
-数组,从而使其成为C-“字符串”。顺便说一句,这句话:
buffer[bytesRead] = '\0';
要求
buffer
至少引用1024 + 1
字节。。。但是不需要引入
tmp
的用法。代码也可能如下所示:char buffer[1024 + 1];
ssize_t result = read(sock, buffer, sizeof buffer - 1);
if (-1 == result)
{
perror("read() failed");
}
else
{
size_t bytesRead = result;
buffer[bytesRead] = '\0';
int num = atoi(buffer);
if (0 == num)
{
fprintf(stderr, "atoi() (might have) failed");
}
...
}
关于c - 如何从C中的套接字读取整数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/28861004/