知名网站名称,六安建设网站,群晖wordpress 外网,建网站需要域名1.C语言中字符与字符串的比较方法
在C语言中#xff0c;单字符可以用进行比较也可以用 , ,但是字符串却不能用直接比较#xff0c;需要用strcmp函数。
strcmp 函数的原型定义在 string.h 头文件中#xff0c;其定义如下#xff1a;
int strcmp(const …1.C语言中字符与字符串的比较方法
在C语言中单字符可以用进行比较也可以用 , ,但是字符串却不能用直接比较需要用strcmp函数。
strcmp 函数的原型定义在 string.h 头文件中其定义如下
int strcmp(const char *s1, const char *s2);
strcmp 函数的返回值如下
如果 s1 小于 s2即 s1 在字典序中排在 s2 之前返回一个负整数。如果 s1 等于 s2返回 0。如果 s1 大于 s2即 s1 在字典序中排在 s2 之后返回一个正整数。
#include stdio.h
#include string.hint main()
{const char *str1 hello;const char *str2 world;const char *str3 hello;printf(Comparing %s and %s: %d\n, str1, str2, strcmp(str1, str2)); // 输出负整数printf(Comparing %s and %s: %d\n, str1, str3, strcmp(str1, str3)); // 输出 0return 0;
}在这个示例中strcmp(str1, str2) 会返回一个负整数因为 hello 在字典序中排在 world 之前而 strcmp(str1, str3) 会返回 0因为两个字符串是相同的。
单字符可以直接比较 对于字符数组进行赋值只能用strcpy函数进行赋值或者在初始化时赋值 但是对于字符指针可以直接赋值 2.字符数组的一些坑点
先抛出问题 为啥ch数组打印出来是乱码而ch2打印却好好地。
原因
printf通过%s 打印字符串时原理是依次输出每个字符当读到结束符\0时结束打印; 因为 %s 期望字符串以 \0 结束所以pirintf输出时ch找不到结束标志符号就会内存越界导致乱码。
因此对于字符串初始化尽量用下面的方式也是最常用的方式他会自动补\0;
char str[] word;
//或者以下
char str[长度]{0};
strcpy(str,字符串);
fgets使用方法更安全
fgets(char* _Buffer,int _MaxCount,FILE* _Stream);
他会自动截止并且补充结束标志符第二个参数既是最大长度但实际存储只能是最大长度-1因为要留一个给结束标志符。 3.缓冲区的坑
scanf与缓冲区的结合导致的坑 上面图片中为啥是这样呢
若是scanf读取数据时分开读取时而读取字符的前面刚好有读取非字符数据时会在缓冲区残留\n-----回车键
因此会把缓冲区的\n赋值给下面的字符类型数据导致数据错误.所以需要再他俩之间进行主动清空缓冲区 同理fgets使用也会遇到缓冲区的坑!!! #includestdio.h
#includestdlib.hint main()
{int n 0;scanf(%d, n);//因为接下来要存入的字符串故要清楚此时缓冲区残留的\ngetchar();char* p (char*)malloc(n);fgets(p, n, stdin);printf(%s\n, p);free(p);return 0;
}
4.结构体内存对齐 【注】这里说的最大成员的大小是指的是成员变量的 类型大小 所比的大小 对于考研指导上面的结论即可。但若是想深入了解可以继续看下面解释