如何从 C 中的套接字读取整数
How to read an integer from a socket in C
我正在尝试从套接字中读取 char 数组并获取整数值,然后可以在 for 循环中使用该整数值。可悲的是,我在 atoi() 处遇到了分段错误。我究竟做错了什么?
bytesRead = read(sock, buffer, 1024);
buffer[bytesRead] = '[=10=]';
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-"string",即带有 0
终止符。更改以下内容:
char tmp[bytesRead];
成为
char tmp[bytesRead + 1] = "";
上面的修改做了两件事:
- 再分配一个字节,然后您将使用。
- 将所有字节设置为零。
因此,如果您通过调用 strncpy()
覆盖第 1st bytesRead
个字节,最后一个字节将保持不变,并且继续 '[= 18=]'
,即 0
-终止 char
-数组,并由此使它成为 C-"string".
顺便说一句,这一行:
buffer[bytesRead] = '[=12=]';
需要 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] = '[=13=]';
int num = atoi(buffer);
if (0 == num)
{
fprintf(stderr, "atoi() (might have) failed");
}
...
}
我正在尝试从套接字中读取 char 数组并获取整数值,然后可以在 for 循环中使用该整数值。可悲的是,我在 atoi() 处遇到了分段错误。我究竟做错了什么?
bytesRead = read(sock, buffer, 1024);
buffer[bytesRead] = '[=10=]';
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-"string",即带有 0
终止符。更改以下内容:
char tmp[bytesRead];
成为
char tmp[bytesRead + 1] = "";
上面的修改做了两件事:
- 再分配一个字节,然后您将使用。
- 将所有字节设置为零。
因此,如果您通过调用 strncpy()
覆盖第 1st bytesRead
个字节,最后一个字节将保持不变,并且继续 '[= 18=]'
,即 0
-终止 char
-数组,并由此使它成为 C-"string".
顺便说一句,这一行:
buffer[bytesRead] = '[=12=]';
需要 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] = '[=13=]';
int num = atoi(buffer);
if (0 == num)
{
fprintf(stderr, "atoi() (might have) failed");
}
...
}