all righyyyy 2023-02-10 11:24 采纳率: 97.4%
浏览 29
已结题

关于#c语言#的问题,使用未初始化的内存q ?


#include <stdio.h>
#include <string.h>

void f(char* p)
{
    char max , * q;
    int i = 0;
    max = p[i];
    while (p[i] != '\0')
    
        
        {
            if (max < p[i])
            {max = p[i]; q = p + 1; }

            i++;
        }
        while (q > p)
        
            {    *q = *(q - 1); q--; }

            p[0] = max;
            
}


int mani()
{
    char str[80] = "abcde";

    f(str);

    puts(str);

    printf("\n");


    return 0;
}
  • 写回答

2条回答 默认 最新

  • 北海 2023-02-10 11:42
    关注

    这段代码有点问题:

    1. 使用未初始化的内存q,如果p数组中不存在比它大的元素,那么q指针将不指向任何内存位置。
    2. 代码中的 "q = p + 1;" 应该是 "q = p + i;".
    3. while循环内的逻辑应该是移动q的值而不是q的地址。
    #include <stdio.h>
    #include <string.h>
     
    void f(char* p)
    {
        char max, *q;
        int i = 0;
        max = p[i];
        q = p;
        while (p[i] != '\0')
        {
            if (max < p[i])
            {
                max = p[i];
                q = p + i;
            }
            i++;
        }
        if (q > p)
        {
            while (q < p + strlen(p))
            {
                *(q - 1) = *q;
                q++;
            }
            *(q - 1) = max;
        }
    }
     
    int main()
    {
        char str[80] = "abcde";
     
        f(str);
     
        puts(str);
     
        printf("\n");
     
        return 0;
    }
    

    我修改了下,你试试

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 2月10日
  • 已采纳回答 2月10日
  • 创建了问题 2月10日