我们如何编写这种类型的语法
#include<stdio.h>
main()
{
char *str;
str="%s";
printf(str,"K\n");
return 0;
}
printf
语句是否有效?
答案 0 :(得分:3)
是的,它是有效的,因为您的str
类型为char *
。这是printf的原型:
int printf ( const char * format, ... );
从被调用函数的角度来看,您的语句将与:
相同printf("%s","K\n");
"%s"
和"K\n"
是char *
类型的常量表达式。
答案 1 :(得分:3)
对printf()
的函数调用是有效的,因为作为第一个参数,它需要一个常量字符串作为格式说明符。不要认为字符串是放在引号之间的东西 - 把它想象成一个字符数组(加上一个终止的0字符)。在C(以及任何有意义的编程语言)中,只要有一个值,它的类型和实际值/内容就决定了它的行为 - 让它成为文字,变量或任何其他表达式(我们现在不考虑const的正确性)为了简单起见)。就像在数学中一样,你是否写
3 + 2 = 5
或
x = 3
y = 2
x + y = 5
这里第二个相等的第三行仍然有效,尽管x和y不是文字。它们是变量,在使用它们时会使用它们的当前值。
现在是关于其他答案缺乏的const正确性的一个小观点:字符串文字的类型为const char *
而不是char *
,因为您无法更改其内容。因此,编写
char *foo = "blah blah";
改为写
const char *foo = "blah blah";
答案 2 :(得分:1)
是的,语法有效。该程序的结果是字符串“K \ n”
其中\ n表示换行符。
%s告诉printf它将要打印的第一个arg应该打印成一个字符串。
请参阅:http://www.cplusplus.com/reference/clibrary/cstdio/printf/
这是一个非常简单的程序。在你问这个问题的时候,你可以自己编译并运行程序并看到答案。你做得最好。
答案 3 :(得分:0)
printf("%s","K\n");
- 此语句包含两个字符串文字%s
ans k\n
。这两个字符串文字将作为只读数据在文本分段中。现在考虑1000
是字符串文字%s
的地址,2000
是字符串文字k\n
的地址。 1000
和2000
将是两个争论,将传递给printf
。
printf("%s","K\n");
这可以写成如下方式
...
char *a = "%s"; //Address 1000 is stored in a
char *b = "k\n"; //Address 2000 is stored in b
printf(a,b); //Now we are passing 1000 and 2000 to printf
...
而且我想告诉你,下面的方法也可以打印一个字符串。
...
char *a = "hello world"
printf(a); //This will print hello world
...