C语言字符串处理

C语言 字符串 %s

前言

C语言处理字符串 通过%s输出遇到的问题

1、我的结构体定义

1
2
3
4
5
6
7
8
9
10
11
12
typedef struct

{

char head [4];

char name [8];

char spare [4];

} IF_AA01; //aa01

定义了三个结构体成员变量,均为字符数组。spare为空格。

2、main()函数

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
int main(int argc, char const *argv[])

{

IF_AA01 aa01;

char string[16] = "AA01AS01101 ";

char _no[8];

memcpy(&aa01, string, sizeof(aa01));

// 将字符串中的空格替换为 '\0'

for (int i = 0; i < sizeof(aa01.name); i++)
{

if (aa01.name[i] == ' ') {

aa01.name[i] = '\0';

}

}

strncpy(_no, aa01.name, sizeof(aa01.name));

printf("[%.*s]\n", sizeof(aa01.head), aa01.head);

printf("[%s]",_no);

return 0;

}

string 字符串定义的 AA01AS01101 后面一共5个空格 , name属性的最后一个空格 ,还有spare 的4个空格 。

3、格式化控制 %s

使用%s格式化控制输出字符串时,我发现如果不进行控制,他会一直输出到\0为止 。
这就导致在结构体中的字符串成员变量失去价值 。

4、解决方案

  1. %.4s 设置宽度,即输出从此地址下的往后4个字节的字符串的宽度 。

  2. %.*s * 相当于一个占位符,和1一样 。
    语法 :printf("[%.*s]\n", sizeof(aa01.head), aa01.head);

  3. 第三种方法是我将name的第八位的空格 ,也就是 name[7] 空格替换为了\0,这样遇到结束符号就停止,不会再向下输出了。


C语言字符串处理
http://zanderchan666.github.io/2023/09/13/C语言字符串处理/
作者
Zander
发布于
2023年9月13日
许可协议