gpt4 book ai didi

c - 为什么 s1 读取的是空字符?

转载 作者:行者123 更新时间:2023-11-30 21:21:36 25 4
gpt4 key购买 nike

#include <stdio.h>
#include <string.h>
#pragma
int main()
{
char s1[5];
char s2[5];
scanf("%s%s",s1,s2);//enter apple in both cases
printf("%s",s1);
}

我的问题是,在我输入一个与字符数组 s1 大小相同的字符串后,为什么 s1 读取 null ?

最佳答案

使用

scanf("%4s%4s", s1, s2);

将输入限制为 4 个字符,将第五个(最后一个)字符保留为空字符 (\0)。新代码的结果将是这样的:

[user@so ~]$ ./a.out
Enter s1 and s2: apple apple
s1 = `appl`
s2 = `e`

发生这种情况是因为 scanf 在完成第一个字符串的位置继续读取第二个字符串。并且由于s1限制为4个字符,因此s2的读取将从字符e开始继续。

        ┌──────first %4s stops after reading 4 characters and
│ stores "appl" into s1

a│p│p│l│e│ │a│p│p│l│e 'a'│'p'│'p'│'l'│ 0 'e'│ 0 │ ? │ ? │ ?
─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─ s1 ───┼───┼───┼───┼─── s2 ───┼───┼───┼───┼───
0│1│2│3│4│5│6│7│8│9│ 0 │ 1 │ 2 │ 3 │ 4 0 │ 1 │ 2 │ 3 │ 4


└──────second %4s stops at the first whitespace and
stores "e" into s2

其他输入的结果:

[user@so ~]$ ./a.out
Enter s1 and s2: appleapple
s1 = `appl`
s2 = `eapp`
[user@so ~]$ ./a.out
Enter s1 and s2: abc 123456
s1 = `abc`
s2 = `1234`

关于c - 为什么 s1 读取的是空字符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24112137/

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