如何在C中正确使用%s?

3pmvbmvn  于 2022-12-03  发布在  其他
关注(0)|答案(6)|浏览(453)

我知道%s是一个字符串,但我不知道如何使用它。谁能给我一个非常基本的例子,说明它是如何使用的,以及它与char有何不同?
下面给出的所有例子都使用了还没有教过的数组,所以我假设我也不会使用%s。

qeeaahzv

qeeaahzv1#

对于*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);

scanf中使用没有explicit字段宽度的%s,会造成与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。注意,在这种情况下,带有说明符的字段没有什么区别。

xxhby3vn

xxhby3vn2#

现在开始:

char str[] = "This is the end";
char input[100];

printf("%s\n", str);
printf("%c\n", *str);

scanf("%99s", input);
wsxa1bj1

wsxa1bj13#

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

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

将给予
这就是结局

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

将给予
这是

tez616oj

tez616oj4#

void myfunc(void)
{
    char* text = "Hello World";
    char  aLetter = 'C';

    printf("%s\n", text);
    printf("%c\n", aLetter);
}
bprjcwpo

bprjcwpo5#

%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是一个字符数组,我们可以为每个内存空间分配多个字符

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=“this is a word”//字符的word array现在得到这个字符串,并且是静态定义的
toy还可以为char数组赋值,并使用strcpy之类的函数对其赋值;

strcpy(string,"hello" );

这将执行与示例相同的操作,并自动在末尾添加(char)0
所以如果你用%S printf(“my string %s”,string)打印它;
我们可以只显示它的一部分

//                         the array    one char
printf("first letter of wrd %s     is    :%c ",string,string[1]  );
tf7tbtn2

tf7tbtn26#

#include <stdio.h>
int main() {
    printf("%s", "HELLO WORLD! ");
    return 0;
}

相关问题