C 语言初学这,请教字符串排序问题

2018-12-24 18:44:05 +08:00
 chenqh

代码

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

int myCompare (const void * a, const void * b ) {
    const char *pa = *(const char**)a;
    const char *pb = *(const char**)b;

    return strcmp(pa,pb);
}

int main() {
    int i;
    // const char *input[] = {"a","orange","apple","mobile","car"};
    const char *input[1024];
    input[0]="a";
    input[1] = "orange";
    input[2] = "apple";
    input[3] = "apple";
    input[4] = "mobile";
    input[5] = "car";
    int stringLen = sizeof(input) / sizeof(char *);
    qsort(input, stringLen, sizeof(char *), myCompare);

    for (i=0; i<stringLen; ++i)
        printf("%d: %s\n", i, input[i]);
}

这段代码为什么会报 coredump
但是如果把input变成const char *input[] = {"a","orange","apple","mobile","car"};,那么就不会报错,求指点!!

2607 次点击
所在节点    Linux
22 条回复
2exploring
2018-12-26 13:40:02 +08:00
@aa514758835 你在 20 楼中的编译报错是因为你把一个 const char* 类型赋给了 char* 类型,这在 C++ 中是不被允许的( C 好像没有此限制,你的源文件后缀是 cpp,想必是 c++ 了),并不能说明不 malloc 就不能用,你好好看一下编译器给的错误信息。
还有你说的改为 const char input[1024] 这个的问题也不在 const,而是你不明不白地把一个指针数组改为了 char 数组,我不知道你要怎么去使用这个 input ?
aa514758835
2018-12-26 13:48:15 +08:00
@2exploring 看来我还得再多了解一下......

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/520584

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX