gpt4 book ai didi

c - 如何在 sprintf 中写一个没有警告限制的字符串?

转载 作者:行者123 更新时间:2023-12-05 09:11:49 27 4
gpt4 key购买 nike

我一直在使用这段代码:

char options_string[96];
sprintf(options_string,"%s_G%u", options_string, options.allowed_nucleotide_gap_between_CpN);

这只是将无符号整数写入混合了一些字母的字符串。

但是对于我刚开始使用的 GCC 的新版本 9,警告我:

warning: passing argument 1 to restrict-qualified parameter aliases with argument 3 [-Wrestrict] 1012 |
sprintf(options_string,"%s_G%u", options_string, options.allowed_nucleotide_gap_between_CpN); | ^~~~~~~~~~~~~~ ~~~~~~~~~~~~~~

我读到过,制作这样的字符串的最佳方法是使用 sprintf,正如我所使用的:How to convert an int to string in C?

我重新检查了代码,我没有使用任何 restrict 关键字。

如何在没有警告的情况下写入此字符串?

最佳答案

该代码导致未定义的行为,因为字符缓冲区的同一部分同时用作 sprintf 的输入和输出。在这种情况下,警告是有用的信息。为了正确,您必须更改代码,使输入和输出之间没有重叠。

例如,您可以找到当前字符串的末尾并从那里开始写入。在输出长度中防止缓冲区溢出也是明智的。

可能的代码:

char options_string[96];
// ...assume you omitted some code that writes some valid string

size_t upto = strlen(options_string);
int written = snprintf(options_string + upto, sizeof options_string - upto,
"_G%u", options.allowed_nucleotide_gap_between_CpN);
if ( written < 0 || written + upto >= sizeof options_string )
{
// ...what you want to do if the options don't fit in the buffer
}

关于c - 如何在 sprintf 中写一个没有警告限制的字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59708584/

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