怎么用scanf()读取一个char指针的句子?

How to read a sentence of char pointer with scanf()?

我有一个字符指针: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); 无效。

我该怎么做?

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

除非 char * 指针指向现有字符串,或指向使用 malloc 系列函数分配的内存,否则使用 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