字符串函数改变参数二的数据吗?

用for循环和strcmp比较多个字符串大小,访问冲突了。请问是参数二原始数据被改变了吗还是其他原因啊?

代码呢?

把代码贴出看看,按理说 strcmp 不像 strcpy,不写入,应该不会出错
除非传入的字符串指针是无效地址,或者传入的字符串没有\0结束符

不知道你这个问题是否已经解决, 如果还没有解决的话:
  • 帮你找了个相似的问题, 你可以看下: https://ask.csdn.net/questions/7606265
  • 这篇博客你也可以参考下:C语言不用strcmp函数比较字符串大小
  • 除此之外, 这篇博客: 字符数组与二维数组的运用中的 (8)strcmp 比较字符串大小 部分也许能够解决你的问题, 你可以仔细阅读以下内容或者直接跳转源博客中阅读:
    char str1[100]="Programming";
         char str2[100]="object";
         printf("%d",strcmp(str1,str2));
    
    strcmp函数用于比较字符串大小(即字符相同位置的ASCII码大小)
    如果str1>str2,输出为1。
    str1<str2,输出为-1。
    str1 =str2,输出为0。
    
  • 您还可以看一下 王桂林老师的C语言:从放弃到入门课程中的 10-5原生字符串处理strcmp小节, 巩固相关知识点
  • 以下回答来自chatgpt:

    使用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函数,避免因为自己写的比较函数有问题而出错。


如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^