C 通过指针打印文本
我现在正在学习c语言,我给出了这个例子,在这里我可以使用指针打印文本C 通过指针打印文本,c,pointers,C,Pointers,我现在正在学习c语言,我给出了这个例子,在这里我可以使用指针打印文本 #include <stdio.h> main () { char *quotes = "One good thing about music, when it hits you, you feel no pain. \"Bob Marley\"\n"; printf(quotes); } #包括 主要() { char*quotes=“音乐的一个好处是,当它击中你时,你不会感到痛
#include <stdio.h>
main ()
{
char *quotes = "One good thing about music, when it hits you, you feel no pain. \"Bob Marley\"\n";
printf(quotes);
}
#包括
主要()
{
char*quotes=“音乐的一个好处是,当它击中你时,你不会感到痛苦。\“Bob Marley\”\n;
printf(报价);
}
我从编译器那里得到一个警告“格式化不是字符串文字,没有格式参数”,当我执行程序时,它会成功运行。我在这里读到了一些其他问题,他们从编译器那里得到了相同的警告,但我没有找到适合我的答案。我明白我收到这条信息的原因:
此警告是gcc告诉您它无法验证printf样式函数(printf、fprintf…等)的format string参数的方式。当编译器无法手动查看字符串并确保在运行时一切正常时,会生成此警告…
案例3。这就是你的情况。您正在获取运行时生成的字符串并尝试打印它。您得到的警告是编译器警告您字符串中可能有格式说明符。比如说“坏的%sdata”。在这种情况下,运行时将尝试访问不存在的参数以匹配%s。更糟糕的是,这可能是用户试图利用您的程序进行攻击(导致它读取不安全的数据)。
但是,为了不让编译器发出警告,我必须在本例中添加什么?您需要告诉
printf
您正在打印的是什么<代码>%s描述符将告诉printf您正在打印字符串
printf
=(“正在打印的数据类型的描述符”,保存数据的变量)的格式
字符串的描述符为%s,字符为%c,整数为%d
将printf更改为:
printf("%s",quotes);
必须以最简单的形式指定格式字符串:
char *quotes = "One good thing about music(...)\n";
printf("%s", quotes);
或者,您可以使用格式字符串装饰输出:
char *quotes = "One good thing about music(...)"; // no newline
printf("%s\n", quotes); // newline added here
或者,如果您不想弄乱格式字符串:
char *quotes = "One good thing about music(...)"; // no newline
puts(quotes); // puts() adds newline
或
将其更改为
printf(“%s”,引号)
它添加了一个说明符,引号
是一个“字符串”或字符数组。此警告是gcc告诉您它无法验证printf样式函数(printf、fprintf…等)的format string参数的方式。当编译器无法手动查看字符串并确保在运行时一切按预期进行时,会生成此警告。让我们看几个例子
所以,正如其他建议的那样,显式使用格式说明符来告诉编译器
printf("%s",quotes);
试试这个:
#include <stdio.h>
main ()
{
char *quotes = "One good thing about music, when it hits you, you feel no pain. \"Bob Marley\"\n";
puts(quotes); //Either
printf("%s",quotes);//or
return 0;
}
#包括
主要()
{
char*quotes=“音乐的一个好处是,当它击中你时,你不会感到痛苦。\“Bob Marley\”\n;
放(引号);//或者
printf(“%s”,引号);//或
返回0;
}
您将收到警告,因为当您正在打印的字符串包含“%”时,这是危险的。在这一行中,百分比是没有意义的,但当您想打印它时,例如:
int main ()
{
int percent = 10;
char *s = "%discount: %d\n";
printf(s, percent);
return 0;
}
当printf遇到第二个百分比并试图从printf的堆栈中弹出一个值时,程序可能会崩溃。
当您想要打印百分比符号时,请使用:“%%折扣:”
put
添加换行符。对于您在发布问题之前所做的努力和搜索,相应的声明是fputs(引号、标准输出)
+1。
int main ()
{
int percent = 10;
char *s = "%discount: %d\n";
printf(s, percent);
return 0;
}