C 而不是冒泡排序这些名字…程序崩溃

C 而不是冒泡排序这些名字…程序崩溃,c,C,很明显,我做错了什么,但无论如何,我都不知道是什么 int main(int argc, char *argv[]) { int done=0; int end=0; int didswap=0; char *temp[2] = {0}; int i; int x; printf("This function Bubble sorts the Flintstones in alphabetical order!\n"); print

很明显,我做错了什么,但无论如何,我都不知道是什么

int main(int argc, char *argv[])
{
    int done=0;
    int end=0;
    int didswap=0;
    char *temp[2] = {0};
    int i;
    int x;
    printf("This function Bubble sorts the Flintstones in alphabetical order!\n");
    printf("The Flintstones names are:\nFred\nBarney\nWilma\nPebbles\nDino\n");
    char *names[5] = {0};
    names [0] = "Fred";
    names [1] = "Barney";
    names [2] = "Wilma";
    names [3] = "Pebbles";
    names [4] = "Dino";
    while(end == 0)
    {
        for(i=0;i<4;i++)
        { 
            if (strcmp(names[i],names[i+1])>0)
            {
                strcpy(temp[0],names[i]);
                strcpy(temp[1],names[i+1]);
                strcpy(names[i],temp[1]);
                strcpy(names[i+1],temp[0]);
                didswap = 1;
            }
            else
            {
                didswap = 0;
            }
            done = done+didswap;
        }  
        if (done == 0)
            end = 1;
        else
            done = 0;
    }
    printf("When alphabetized they are:\n");
    for (i = 0; i < 5; i++)
    {
        printf("%s \n", names[i]);
    }

    system("PAUSE");
    return EXIT_SUCCESS;
 }
intmain(intargc,char*argv[])
{
int done=0;
int end=0;
int-didswap=0;
char*temp[2]={0};
int i;
int x;
printf(“此函数按字母顺序对燧石进行排序!\n”);
printf(“燧石的名称是:\nFred\nBarney\nWilma\nPebbles\nDino\n”);
字符*名称[5]={0};
姓名[0]=“Fred”;
姓名[1]=“巴尼”;
姓名[2]=“威尔玛”;
名称[3]=“卵石”;
姓名[4]=“恐龙”;
while(end==0)
{
对于(i=0;i0)
{
strcpy(临时[0],名称[i]);
strcpy(临时[1],名称[i+1]);
strcpy(名称[i],临时[1]);
strcpy(名称[i+1],温度[0]);
didswap=1;
}
其他的
{
didswap=0;
}
完成=完成+交换;
}  
如果(完成==0)
结束=1;
其他的
完成=0;
}
printf(“按字母顺序排列时为:\n”);
对于(i=0;i<5;i++)
{
printf(“%s\n”,名称[i]);
}
系统(“暂停”);
返回退出成功;
}
名称
字符串是字符串文字,字符串文字在C中是不可变的。试图修改字符串文字会调用未定义的行为


名称
字符串是字符串文字,字符串文字在C中是不可变的。试图修改字符串文字会调用未定义的行为。

您有一个字符串文字数组。这些文件可能保存在只读存储器中,因此您无法更改其内容。但是,您可以通过替换来更改在
名称中存储指向它们的指针的顺序

strcpy(temp[0],names[i]);
strcpy(temp[1],names[i+1]);
strcpy(names[i],temp[1]);
strcpy(names[i+1],temp[0]);


您有一个字符串文本数组。这些文件可能保存在只读存储器中,因此您无法更改其内容。但是,您可以通过替换来更改在
名称中存储指向它们的指针的顺序

strcpy(temp[0],names[i]);
strcpy(temp[1],names[i+1]);
strcpy(names[i],temp[1]);
strcpy(names[i+1],temp[0]);


它是否会给您一条错误消息?哇,由于整个字符串副本,冒泡排序甚至比O^2慢:)不,没有错误消息。它是否会给您一条错误消息?哇,由于整个字符串副本,冒泡排序甚至比O^2慢:)不,没有错误消息。我尝试了此操作,但出现了从“const char*”到“char*”的无效转换错误@user2592484,使数组保持
const char*
s。我尝试了此操作,但出现了从“const char*”到“char*”的无效转换错误@user2592484,使数组保持
const char*
s。那么如何使名称不是字符串文字?那么如何使名称不是字符串文字?
const char* tmp = names[i];
names[i] = names[i+1];
names[i+1] = tmp;