gpt4 book ai didi

c - 我需要帮助如何从较大的字符串中获取较小的字符串?在C中

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

我的问题也可能转化为阻止缓冲区溢出;

第一个策略

char first[40];
char g[] = " Level %d %d Fruit %d:%d ";
char d[41] = {0};
strncpy(d, g, 40);
if(strlen(d) < 40) {
for(i = strlen(d); i < 40; i++) {
d[i] = ' ';
}
}
n = sprintf(first, d, gol, gift, minutes, secs );

我将 n 打印到游戏屏幕上,我得到了文本和一些未知字符,这意味着某处存在缓冲区溢出。

第二个策略;

char first[40];
char b[40];
strncpy(b, g, sizeof(b));
fgets(b, 40, stdin); // of b[40] = '\0' also fails
n = sprintf(first, b, gol, gift, minutes, secs );

使用“b[40] = '\0' ”,我将 n 打印到游戏屏幕上,我得到了我的文本和一些未知字符,这意味着某处存在缓冲区溢出。使用“fgets ”会使游戏立即崩溃,即使 g 目前是 40 个字符,但我想稍后增加它

对于这两种策略,如果我实际上只是将“g”放入“sprintf ”语句中,它就会执行我想要的操作,除非我将其增加到超过 40 个字符。抱歉,我无法发布整个游戏代码,因为它有 4000 行长,分为 10 个文件。

我很欣赏一种完全不同的方法,可以从更多字符的字符串中获取只有 40 个字符的字符串,而不会留下垃圾。该字符串必须手动输入到代码中,而不是由用户输入,它不必像我声明“g”那样声明。

谢谢

最佳答案

我发现使用“b[40] = '\0' ”会给你一个正确的答案。但是,如果您在 for 循环中使用它,则必须跟踪何时点击空“\0”来中断。这意味着你已经到达终点了。直到一天后我才意识到我得到了一个有效的答案。

无论如何,我的助教最终告诉我,我做的事情比要求的要多得多,也就是说,我从来不需要这样做。

关于c - 我需要帮助如何从较大的字符串中获取较小的字符串?在C中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28817197/

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