用for循环和strcmp比较多个字符串大小,访问冲突了。请问是参数二原始数据被改变了吗还是其他原因啊?
代码呢?
把代码贴出看看,按理说 strcmp 不像 strcpy,不写入,应该不会出错
除非传入的字符串指针是无效地址,或者传入的字符串没有\0结束符
char str1[100]="Programming";
char str2[100]="object";
printf("%d",strcmp(str1,str2));
strcmp函数用于比较字符串大小(即字符相同位置的ASCII码大小)
如果str1>str2,输出为1。
str1<str2,输出为-1。
str1 =str2,输出为0。
使用strcmp函数比较多个字符串大小时,不会改变参数二的原始数据。访问冲突可能是由于其他原因导致的,例如数组越界、指针指向错误等。
如果想使用for循环和strcmp函数比较多个字符串的大小,可以先定义一个字符串数组,将每个字符串存入数组中,然后使用for循环和strcmp函数比较数组中相邻两个字符串的大小即可。下面是示例代码:
#include <stdio.h>
#include <string.h>
#define MAX_LEN 100 //假设字符串最长长度为100
int main() {
int n; //字符串个数
char strings[MAX_NUM][MAX_LEN]; //字符串数组
printf("请输入字符串个数:");
scanf("%d", &n);
//循环读入每个字符串
for (int i = 0; i < n; i++) {
printf("请输入第%d个字符串:", i+1);
scanf("%s", strings[i]);
}
//比较相邻两个字符串的大小
for (int i = 0; i < n-1; i++) {
int cmp = strcmp(strings[i], strings[i+1]);
if (cmp > 0) {
printf("%s > %s\n", strings[i], strings[i+1]);
} else if (cmp == 0) {
printf("%s = %s\n", strings[i], strings[i+1]);
} else {
printf("%s < %s\n", strings[i], strings[i+1]);
}
}
return 0;
}
注意:在读入字符串时,使用scanf函数可能会导致访问冲突问题,所以推荐使用fgets函数读入字符串。同时,在比较字符串大小时,建议使用strcmp函数,避免因为自己写的比较函数有问题而出错。