正确使用C中的%s – 非常基本的水平

我知道%s是一串字符,但我不知道如何使用它。 任何人都可以给我一个非常基本的例子,说明它的使用方式以及它与char的不同之处?


(编辑)的

我进入这门课程已经两周了,这是我第一次编程。 我不允许在作业中使用尚未教授的材料,所以这就是我问的原因。 我有几本关于C的书并且用Google搜索但仍然不确定,所以我问道。 (感谢所有的下选票)下面给出的所有例子都使用了尚未教授的数组,所以我假设我还不能使用%s。 谢谢。

对于*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字段宽度的scanf使用%s打开相同的缓冲区溢出漏洞。 也就是说,如果输入流中的字符数多于目标缓冲区的大小以容纳,则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" 

编辑

使用带有%s转换说明符的scanf将停止扫描第一个空白字符; 例如,如果您的输入流看起来像

 "This is a test" 

然后scanf("%55s", str_buf)将读取并将"This"分配给str_buf 。 请注意,带有说明符的字段在这种情况下没有区别。

开始:

 char str[] = "This is the end"; char input[100]; printf("%s\n", str); printf("%c\n", *str); scanf("%99s", input); 
 void myfunc(void) { char* text = "Hello World"; char aLetter = 'C'; printf("%s\n", text); printf("%c\n", aLetter); } 

%s将获取所有值,直到它变为NULL,即’\ 0’。

 char str1[] = "This is the end\0"; printf("%s",str1); 

会给

这就是结局

 char str2[] = "this is\0 the end\0"; printf("%s",str2); 

会给

这是

%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] );