我制作了以下程序,该程序使用read
(C 中的系统调用)从用户那里获取字符串(长度小于 100)。
#include<stdio.h>
#include <unistd.h>
#include <string.h>
int main() {
char *s;
int a = read(0, s, 100);
s[a-1] = '\0';
printf("\"%s\" \n read returned: %i; NUL at: %u", s, a, strlen(s));
return 0;
}
我在这里期望的是,它会在用户输入换行符之前获取字符。然后它将用 替换该'\n'
字符'\0'
,并打印它。
该程序运行良好,直到我在 中输入 15 个或更少的字符stdin
,但当超过 16 个字符时停止工作。
我的输入如下:
E:\My Files\Codes>a.exe
1234567890123456
"1234567890123456"
returned = 17; length = 16
E:\My Files\Codes>a.exe
12345678901234567
[My program hanged on this input.]
为什么它只挂在16上?这个2^2有什么特别之处?后置脚本:我使用string.h只是为了获取字符串的长度。一旦我的程序开始运行良好,我将删除它。