如何使用 scanf() 在 C 中接受 char *

how to accept a char * in C using scanf()

我正在尝试在 C 中以 char * 的形式输入单词

如:

char *inputText;
scanf("%s",inputText);
printf("This is your string %s",inputText);

我试过使用

scanf("%s",&inputText);

还有 每次当我 运行 it

时遇到编译错误或分段错误
"format '%s' expects type 'char *' but argument 2 has type 'char **'

我不确定我是否遗漏了一些非常简单的东西,但它非常令人困惑。 我的代码依赖于使用 char * 如果有一种方法可以将更简单的输入法转换为 char * 那么你能告诉我那个方法吗?

您还没有初始化 inputText 所以它指向一些您可能甚至不拥有的随机内存。要求 scanf 写入该内存位置会导致未定义的行为。

您需要为指向的指针分配内存:

char *inputText = malloc(amount_of_bytes_to_allocate);

现在 inputText 指向分配的内存,并且 scanf 可以愉快地写入该内存位置而不会出现段错误。请记住,当您使用完分配的内存后,您必须 free(inputText)

但最好不要在这种情况下使用动态内存 (malloc),因为使用自动内存就可以做到:只需将 inputText 声明为 数组 而不是指针:

char inputText[size_of_array];

请记住,您的 size_of_array(或 amount_of_bytes_to_allocate)必须足够大以容纳 scanf 将要写入数组的整个字符串,包括 终止空字符。否则你会再次有未定义的行为。

首先,作为一般预防措施,最好将新指针初始化为 NULL,以确保它们不会指向您的程序不允许访问的内存。

我会使用 getline() 作为 scanf() 的替代方法,尤其是当您的输入大小可能不同时。它会为您分配一个适当大小的缓冲区,因此您无需担心输入太多字符。

char *inputText = NULL;
int inputSize;

if (getline(&inputText, &inputSize, stdin) >= 0)
   printf("This is your string: %s\n", inputText);
else
   printf("Error\n");

您仍然需要自己释放分配给 inputText 的内存,所以不要忘记这样做并在完成后将其设置为 NULL