我知道%s是一串字符,但我不知道如何使用它。 任何人都可以为我提供一个非常基本的例子,说明它的使用方式以及它与char的不同之处吗?
(编辑)的
我进入这个课程已经两周了,这是我第一次编程。我不允许在作业中使用尚未教授的材料,所以这就是我问的原因。我有几本关于C的书并且用Google搜索但仍然不确定,所以我问道。 (感谢所有的下选票)下面给出的所有例子都使用了尚未教授的数组,所以我假设我还不能使用%s。谢谢。
答案 0 :(得分:8)
对于*printf
和*scanf
,%s
期望相应的参数属于char *
类型,对于scanf
,它最好指向可写缓冲区(即不是字符串文字)。
char *str_constant = "I point to a string literal";
char str_buf[] = "I am an array of char initialized with a string literal";
printf("string literal = %s\n", "I am a string literal");
printf("str_constant = %s\n", str_constant);
printf("str_buf = %s\n", str_buf);
scanf("%55s", str_buf);
在没有explcit字段宽度的%s
中使用scanf
会打开gets
所执行的缓冲区溢出漏洞。也就是说,如果输入流中的字符数多于目标缓冲区的大小以容纳,scanf
将很乐意将这些额外的字符写入缓冲区外的内存,可能会破坏重要的内容。不幸的是,与printf
不同,您不能将字段作为运行时参数提供:
printf("%*s\n", field_width, string);
一种选择是动态构建格式字符串:
char fmt[10];
sprintf(fmt, "%%%lus", (unsigned long) (sizeof str_buf) - 1);
...
scanf(fmt, target_buffer); // fmt = "%55s"
修改强>
将scanf
与%s
转换说明符一起使用将停止扫描第一个空格字符;例如,如果您的输入流看起来像
"This is a test"
然后scanf("%55s", str_buf)
会阅读并将"This"
分配给str_buf
。请注意,带有说明符的字段在这种情况下没有区别。
答案 1 :(得分:4)
这里是:
char str[] = "This is the end";
char input[100];
printf("%s\n", str);
printf("%c\n", *str);
scanf("%99s", input);
答案 2 :(得分:1)
void myfunc(void)
{
char* text = "Hello World";
char aLetter = 'C';
printf("%s\n", text);
printf("%c\n", aLetter);
}
答案 3 :(得分:1)
%s将获取所有值,直到它变为NULL,即'\ 0'。
char str1[] = "This is the end\0";
printf("%s",str1);
将给出
这是结束
char str2[] = "this is\0 the end\0";
printf("%s",str2);
将给出
这是
答案 4 :(得分:0)
%s是char
数组的表示char string[10] // here is a array of chars, they max length is 10;
char character; // just a char 1 letter/from the ascii map
character = 'a'; // assign 'a' to character
printf("character %c ",a); //we will display 'a' to stout
所以string是一个char数组,我们可以为每个内存空间分配多个字符
string[0]='h';
string[1]='e';
string[2]='l';
string[3]='l';
string[4]='o';
string[5]=(char) 0;//asigning the last element of the 'word' a mark so the string ends
这个分配可以在初始化时完成 char word =“这是一个单词”//字符数组字符现在得到这个字符串并且是静态定义的
玩具还可以为字符数组赋值,并使用strcpy;
等函数为其分配strcpy(string,"hello" );
这与示例相同,并在末尾自动添加(char)0
所以如果用%S打印它 printf(“my string%s”,string);
以及string是一个数组,我们只能显示它的一部分
// the array one char
printf("first letter of wrd %s is :%c ",string,string[1] );