gpt4 book ai didi

c - C 中的 “How to fix ‘format string is not a string literal (potentially insecure)’ 错误”

转载 作者:行者123 更新时间:2023-11-30 16:13:58 31 4
gpt4 key购买 nike

我正在做cs50,有一个关于函数的问题,我无法理解这两个代码之间的区别。为什么第一个出现错误? enter image description here

就在cs50沙箱上

我的代码(有错误)

#include <cs50.h>
#include <stdio.h>

int get_positive_int(string prompt);

int main(void)
{
int num = get_positive_int("Height:");
}

int get_positive_int(string prompt)
{
int num;
do
{
num=get_int(prompt);
}
while(num<1);
return num;
}

正确的代码

#include <cs50.h>
#include <stdio.h>
int get_positive_int(void);
int main(void)
{
int i = get_positive_int();
}
// Prompt user for positive integer
int get_positive_int(void)
{
int n;
do
{
n = get_int("Height: ");
}
while (n < 1);
return n;
}

最佳答案

在第一个代码示例中,编译器提示第 15 行传递给 get_int() 函数调用的第一个参数“不是字符串文字”。原因是cs50.h with a special attribute中get_int()的定义:

int get_int(const char *format, ...) __attribute__((format(printf, 1, 2)));

“格式”attribute is a GNU extension符合 C/C++ 标准,我们可以通过该标准要求编译器对我们的源代码执行更多检查。在您的示例中,我们希望编译器针对 get_int() 的第一个参数运行类型检查。为了运行类型检查,编译器需要一个文字值而不是变量作为 get_int() 的第一个参数。

正确的代码示例包含预期的字符串文字,因此允许编译器运行类型检查并毫无问题地进行编译:

n = get_int("Height: ");

关于c - C 中的 “How to fix ‘format string is not a string literal (potentially insecure)’ 错误”,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57847463/

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