gpt4 book ai didi

c - 有人请解释一下 c 中的字符串吗?

转载 作者:行者123 更新时间:2023-12-04 12:11:11 24 4
gpt4 key购买 nike

如何在不连接的情况下一个接一个地存储两个字符串(我们可以增加地址)

char str[10];
scanf("%s",str);
str=str+9;
scanf("%s",str);

注意:这里如果我将第一个字符串作为 BALA 并将第二个字符串作为 HI,它应该在 BALA 之后打印为 HI。但 HI 不应该取代 BALA。

最佳答案

你不能递增(或以任何其他方式更改)这样的数组,数组变量 (str) 是一个无法更改的常量。

你可以这样做:

char str[64];

scanf("%s", str);
scanf("%s", str + strlen(str));

这将首先扫描到 str,然后立即再次扫描,在第一个字符串的终止 '\0' 之上开始新字符串。

如果您首先输入"BALA"str 的开头将如下所示:

     +---+---+---+---+----+
str: | B | A | L | A | \0 |
+---+---+---+---+----+

并且由于 strlen("BALA") 是四,下一个字符串将被扫描到缓冲区中,从上面可见的 '\0' 开始。如果您随后输入 "HI"str 将像这样启动:

     +---+---+---+---+---+---+----+
str: | B | A | L | A | H | I | \0 |
+---+---+---+---+---+---+----+

此时,如果您打印 str,它将打印为 "BALAHI"

当然,这非常危险并且可能会导致缓冲区溢出,但这正是您想要的。

关于c - 有人请解释一下 c 中的字符串吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16517056/

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