我试图将单个字符读入一个名为 val 的 char* 中,当我使用 scanf() 时它返回 null。这是我的代码:
#include <stdio.h>
int main(int argc, char *argv[])
{
char *val;
if (argc == 2)
{
val = argv[1];
}
else
{
scanf("%s", val);
}
printf("Val = %s", val);
}
如果我尝试使用 malloc(),如果输入是一个字符长,它将连续从标准输入读取,这是我希望输入的长度。
为什么 scanf("%s", val);返回空值?
scanf()
需要将输入读取到有效位置。
对于
scanf("%s", val);
,代码传递给scanf()
一个未初始化的指针val
到scanf()
。这导致未定义的行为(UB)。
相反,将指针传递给准备好接受输入的内存。
传递指向准备接受字符的位置的指针。
使用 width 以避免溢出。
检查返回值。
char *val;
char s[100+1];
if (argc == 2) {
val = argv[1];
} else {
if (scanf("%100s", s) != 1) {
fprintf(stderr, "Invalid input\n");
return -1;
}
val = s;
}
阅读单个字符使用:
char ch;
if (scanf("%c", &ch) != 1) {
fprintf(stderr, "Invalid input\n");
return -1;
}