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、解决方案
-
%.4s设置宽度,即输出从此地址下的往后4个字节的字符串的宽度 。 -
%.*s* 相当于一个占位符,和1一样 。
语法 :printf("[%.*s]\n", sizeof(aa01.head), aa01.head); -
第三种方法是我将
name的第八位的空格 ,也就是name[7]空格替换为了\0,这样遇到结束符号就停止,不会再向下输出了。
posted on 2024-10-15 16:07 ZanderChan 阅读(9) 评论(0) 收藏 举报
浙公网安备 33010602011771号