#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;
}

关于#c语言#的问题,使用未初始化的内存q ?
- 写回答
- 好问题 0 提建议
- 关注问题
- 邀请回答
-
2条回答 默认 最新
- 北海 2023-02-10 11:42关注
这段代码有点问题:
- 使用未初始化的内存q,如果p数组中不存在比它大的元素,那么q指针将不指向任何内存位置。
- 代码中的 "q = p + 1;" 应该是 "q = p + i;".
- 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无用