为什么 scanf("%s", val);返回空值?

问题描述 投票:0回答:1

我试图将单个字符读入一个名为 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(),如果输入是一个字符长,它将连续从标准输入读取,这是我希望输入的长度。

c stdio
1个回答
0
投票

为什么 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;
}
© www.soinside.com 2019 - 2024. All rights reserved.