在C中正确使用%s-非常基本的级别
我知道%s是一个字符串,但我不知道如何使用它。 谁能给我提供一个非常基本的例子,说明它是如何使用的,它与char有什么不同在C中正确使用%s-非常基本的级别,c,C,我知道%s是一个字符串,但我不知道如何使用它。 谁能给我提供一个非常基本的例子,说明它是如何使用的,它与char有什么不同 (编辑) 这门课我已经上了两周了,这是我第一次编程。我不允许使用作业中还没有教过的材料,所以这就是我问的原因。我有几本关于C语言的书,在谷歌上搜索过,但还是不确定,所以我问。(感谢所有的反对票)下面给出的所有示例都使用了尚未教授的数组,因此我假设我也不能使用%s。谢谢 下面是: char str[] = "This is the end"; char input[100]
(编辑) 这门课我已经上了两周了,这是我第一次编程。我不允许使用作业中还没有教过的材料,所以这就是我问的原因。我有几本关于C语言的书,在谷歌上搜索过,但还是不确定,所以我问。(感谢所有的反对票)下面给出的所有示例都使用了尚未教授的数组,因此我假设我也不能使用%s。谢谢 下面是:
char str[] = "This is the end";
char input[100];
printf("%s\n", str);
printf("%c\n", *str);
scanf("%99s", input);
%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 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[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=“这是一个单词”//字符的单词数组现在得到了这个字符串,并且是静态定义的
toy还可以为字符数组赋值,并使用strcpy等函数赋值
strcpy(string,"hello" );
这样做与示例相同,并在末尾自动添加(char)0
所以如果你用%S打印它
printf(“我的字符串%s”,字符串)
字符串是一个数组,我们可以显示它的一部分
// the array one char
printf("first letter of wrd %s is :%c ",string,string[1] );
对于
*printf
和*scanf
,%s
希望相应的参数类型为char*
,对于scanf
,最好指向可写缓冲区(即,不是字符串文字)
在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
。请注意,在这种情况下,带说明符的字段没有任何区别。可能重复的@nofe%c
用于单个字符,而%s
用于以null结尾的一系列字符。你到底不明白什么?
char fmt[10];
sprintf(fmt, "%%%lus", (unsigned long) (sizeof str_buf) - 1);
...
scanf(fmt, target_buffer); // fmt = "%55s"
"This is a test"