怎么用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
。
我有一个字符指针: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
。