wjxhliu 2024-11-27 15:13 采纳率: 0%
浏览 14

插入字符串为什么会多一位?

以下代码,我推算出是976531
为什么代码运行是9767531呢,不明白
哪里多了一位7?
我的推测是这样的

img


#include "stdio.h"

void  fun(char *a,char b){
    while (*(a++)!='\0'); 
    while (*(a-1) < b) {
        *(a--) = *(a-1);
    }
    *(a--) = b;
}

int main() {
    char s[] ="97531",c;
    c=getchar();
    fun(s,c);
    puts(s);
}
    
  • 写回答

2条回答 默认 最新

  • qzjhjxj 2024-11-27 15:56
    关注

    char s[] = "97531";, 这里字符串长度为5,就是说s[] 数组的长度为5,在fun() 函数里再插入一个字符就对数组越界操作了,多出什么内容是随机的,应该修改如下,供参考:

    #include "stdio.h"
    
    void  fun(char* a, char b) {
        while (*a != '\0') a++; //while (*(a++) != '\0'); 修改
        while (*(a - 1) < b) {
            *(a--) = *(a - 1);
        }
        *(a--) = b;
    }
    
    int main() {
        char s[128] = "97531", c; //char s[] = "97531", c; 修改
        c = getchar();
        fun(s, c);
        puts(s);
    }
    
    
    评论 编辑记录

报告相同问题?

问题事件

  • 修改了问题 11月27日
  • 创建了问题 11月27日