gpt4 book ai didi

C - 如何将字符串数组连接到缓冲区中?

转载 作者:太空宇宙 更新时间:2023-11-04 08:10:46 24 4
gpt4 key购买 nike

我正在尝试连接歌曲 twinkle twinkle 中的随机行数。在发送之前进入缓冲区,因为我需要计算缓冲区的大小。

我的代码:

char temp_buffer[10000];
char lyrics_buffer[10000];
char *twinkle[20];
int arr_num;
int i;

twinkle[0] = "Twinkle, twinkle, little star,";
twinkle[1] = "How I wonder what you are!";
twinkle[2] = "Up above the world so high,";
twinkle[3] = "Like a diamond in the sky.";
twinkle[4] = "When the blazing sun is gone,";
twinkle[5] = "When he nothing shines upon,";

srand(time(NULL));
arr_num = rand() % 5;

for (i=0; i<arr_num; i++);
{
sprintf(temp_buffer, "%s\n", twinkle[i]);
strcat(lyrics_buffer, temp_buffer);
}

printf("%s%d\n", lyrics_buffer, arr_num);

即使我得到一个大于 0 的数字,我当前的代码也只打印 1 行。

最佳答案

有两个问题:第一个问题是由 BLUEPIXY 发现的,它是您的循环永远不会按照您认为的那样进行。如果您只是使用调试器单步执行代码,您会非常 很容易地发现这一点(请在未来首先这样做)。

第二个问题是非静态局部变量(比如你的lyrics_buffer)的内容是不确定的。在没有初始化的情况下使用这样的变量会导致未定义的行为。发生这种情况的原因是 strcat 函数查找目标字符串的末尾,它通过查找终止字符 '\0' 来实现。 _如果目标字符串的内容不确定,它将看起来是随机的,并且终止符可能不在数组中的任何位置。

要初始化数组,您只需执行以下操作

char lyrics_buffer[10000] = { 0 };

这将使编译器将其全部初始化为零,这就是 '\0' 的含义。

temp_buffer 不需要此初始化,因为 sprintf 无条件地从第一个位置开始写入,它不会以任何方式检查内容。换句话说,它会初始化缓冲区。

关于C - 如何将字符串数组连接到缓冲区中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39738865/

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