【问题标题】:How to read a sentence of char pointer with scanf()?如何用scanf()读取一个char指针?
【发布时间】:2019-07-04 11:53:33
【问题描述】:

我有一个字符指针:char *sentences;,我是这样读的:

#include <stdio.h>

int main() {
    char *sentences;
    sentences="We test coders. Give us a try?";
    printf("%s", sentences);
    return 0;
}

但我想用 c 中的scanf() 函数阅读。

scanf("%[^\n]s",S);scanf("%s",S); 不起作用。

我该怎么做?

【问题讨论】:

标签: c string pointers scanf char-pointer


【解决方案1】:

您是在声明变量char *sentences; 并立即尝试使用scanf 写入它吗?那是行不通的。

除非char * 指针指向现有字符串,或者指向使用malloc-family 函数分配的内存,否则使用scanf 或类似函数分配给它是未定义的行为:

char *sentences;
scanf("%s", sentences); // sentences is a dangling pointer - UB

由于您实际上没有共享使用 scanf 并且不起作用的代码,我只能假设这是问题所在。

如果您想将用户提供的值分配给字符串,您可以将其声明为固定长度的数组,然后使用合适的输入函数读取它。如果使用正确,scanf 将起作用,但fgets 更简单:

char sentence[200];
fgets(sentence, 200, stdin);
// (User inputs "We test coders. Give us a try")

printf("%s", sentence);
// Output: We test coders. Give us a try.

另外,永远,永远不要使用gets

【讨论】:

  • 建议 printf("&lt;%s&gt;\n", sentence); 以便 OP 看到 '\n' 被保留。
  • @MM 对。更新了我的答案
猜你喜欢
  • 2021-08-17
  • 1970-01-01
  • 2022-01-24
  • 1970-01-01
  • 2015-06-12
  • 2014-07-23
  • 1970-01-01
  • 2018-01-03
  • 1970-01-01
相关资源
最近更新 更多