C语言字符串处理

C语言 字符串 %s

前言

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

1、我的结构体定义

typedef struct

{

	char head [4];

	char name [8];

	char spare [4];

} IF_AA01; //aa01

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

2、main()函数

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,这样遇到结束符号就停止,不会再向下输出了。

posted on 2024-10-15 16:07  ZanderChan  阅读(9)  评论(0)    收藏  举报

导航