#include<stdio.h>
#include<string.h>
#define N 11
int main()
{
void sort(char str[]);
char str[N];
int i, flag = 1;
while (flag)
{
printf("input string:");
gets_s(str);
if (strlen(str) > N-1)
printf("string too long,input again!\n");
else
flag = 0;
}
sort(str);
printf("string sorted:");
for (i = 0; i < N; i++)
printf("%c", str[i]);
printf("\n");
return 0;
}
void sort(char str[])
{
int i, j;
char t;
for(i=0;i<N&&str[i]!='\0';i++)
for (j = i + 1; j < N && str[j] != '\0'; j++)
if (str[j] > str[j + 1])
{
t = str[j];
str[j] = str[j + 1];
str[j + 1] = t;
}
}
根据你的代码,应该是数组越界了吧,当J=N-1,时,J+1=N,数组越界,另外排序那里的逻辑有点问题,修改了一下,如下,供参考:
#include<stdio.h>
#include<string.h>
#define N 11
int main()
{
void sort(char str[]);
char str[N];
int i, flag = 1;
while (flag)
{
printf("input string:");
gets(str);
if (strlen(str) > N-1)
printf("string too long,input again!\n");
else
flag = 0;
}
sort(str);
printf("string sorted:");
for (i = 0; i < N; i++)
printf("%c", str[i]);
printf("\n");
return 0;
}
void sort(char str[])
{
int i, j;
char t;
for(i=0;i<N&&str[i]!='\0';i++)
for (j = i + 1; j < N && str[j] != '\0'; j++)
if (str[i] > str[j]) //主要修改这段代码
{
t = str[j];
str[j] = str[i];
str[i] = t;
}
}
你输入的str字符串太长了,末尾的\0放不下
把defineN11改成100就行了
如果对你有帮助,还请点个采纳