如何使用 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
。
我正在尝试在 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
。