gpt4 book ai didi

C, strcat 之后的 char[] 格式错误的 int

转载 作者:太空宇宙 更新时间:2023-11-04 05:25:49 25 4
gpt4 key购买 nike

当打印一个包含 int 值的 char[] 时,int 是不正确的。然而 sprintf 之后 str 的 printf 输出正确的值。

我正在使用这段代码:

  int i;
for( i = 0; i < 10; i++){
char str[20];
sprintf(str, "%i", i);
char in[50] = "INSERT INTO `Test` (`Col1`, `Col2`) VALUES ('1', '";
strcat(in, str);
strcat(in, "')");
printf("%s", in);
}

输出:INSERT INTO Test (Col1, Col2) VALUES ('1', 'A&?0')

最佳答案

in 太小,因为字符串文字是 50 个字符,这意味着 strcat() 之后的写入超出了缓冲区的末尾导致未定义的行为,在这种情况下导致损坏(实际上字符串文字是 50 + 1 由于附加到字符串文字的隐式空终止符)。要正确增加缓冲区的大小并使用 snprintf()以防止缓冲区溢出并在单个操作中执行字符串构造。例如:

for (int i = 0; i < 10; i++)
{
char str[128];

const int result =
snprintf(str,
sizeof(str),
"INSERT INTO `Test` (`Col1`, `Col2`) VALUES ('1', '%i')",
i);

if (-1 == result)
{
fprintf(stderr, "Failed to create 'INSERT' statement\n.");
}
else if (result >= sizeof(str))
{
fprintf(stderr, "Failed to create 'INSERT' statement: truncated\n");
}
else
{
printf("[%s]\n", str);
}
}

关于C, strcat 之后的 char[] 格式错误的 int,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28179220/

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