gpt4 book ai didi

c - scanf ("%s") 存储字符串,即使在 scanf ("%d"之后使用它之后

转载 作者:行者123 更新时间:2023-12-01 13:34:30 24 4
gpt4 key购买 nike

所以我写了这段代码(忽略缓冲区溢出问题,因为这只是一个简单的例子):

#include<stdio.h>
int main(void){
int n;
char s[10];
printf("Enter a number: ");
scanf("%d",&n);
scanf("%s",s);
printf("%s",s);
return 0;
}

字符串不应该存储在数组中,因为输入缓冲区中应该有一个“\n”,因此 scanf("%s",s) 应该被终止,但事实并非如此。输出打印字符串。

最佳答案

格式说明符 %s 跳过前导空格,即任何 '\n'' ''\t',... 将被忽略,s[0] 将包含输入的第一个非空白字符。

为了稍微演示一下 scanf 中发生的事情,请参阅以下使用 "%n"-scanf 功能的示例code>,它返回到目前为止已处理的字符数;我使用 sscanf 这样结果就不会依赖于用户输入。请注意,在读取字符串时,scanf 处理的字符多于存储在结果中的字符:

#include<stdio.h>
int main(void){
int n;
int pos;
char s[10];
const char* simulatedInput = "123\n abcde";
const char* inputPtr = simulatedInput;

sscanf(inputPtr,"%d%n",&n,&pos);
printf("sscanf on %s processed %d charaters; result n: %d\n", inputPtr, pos, n);

inputPtr += pos; // inputPtr will point at the position of '\n'
sscanf(inputPtr,"%s%n",s,&pos);
printf("sscanf on %s processed %d charaters; yet s as '%s' contains only %lu characters\n", inputPtr, pos, s, strlen(s));

return 0;
}

输出:

sscanf on 123
abcde processed 3 charaters; result n: 123
sscanf on
abcde processed 11 charaters; yet s as 'abcde' contains only 5 characters

关于c - scanf ("%s") 存储字符串,即使在 scanf ("%d"之后使用它之后,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44488398/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com