设置一个指向指针的指针数组,指向另一个数组中的指针

大卫盘

我正在使用的程序使用qsort和我自己的比较函数来对通过标准输入读取的一组单词进行排序。我将每个字符放入指向字符的指针数组,如下所示。

数组现在具有一堆字符,例如-“ \ 0The \ n \ 0brown \ n \ 0fox \ n \ 0is \ n \ 0lazy \ n”

我正在尝试创建另一个指针数组,其中这个新数组的每个元素都指向每个单词的第一个字母(在这种情况下为空字符)。因此,元素0指向前一个\ 0,元素1指向下一个\ 0。我不确定我是否有一个小的语法错误,或者我有一个错误的想法,但是由于输出永远不会以正确的顺序出现,所以总会出错。代码如下:

int buffersize = 2048;
int count = 0;
char* p = (char*) malloc(sizeof(char) * buffersize);
int c;
do{
    c = getchar();
    p[count++] = (char)c;
    if (count == buffersize)
    {
        p = (char*) realloc(p, buffersize * 2);
        buffersize *= 2;
    }
}while (c != EOF);
p[count-1] = '\n';
int i = 0;
int a = 1;
char ** pp = (char**) malloc(sizeof(char*) * count);
pp[0] = &p[0];
for (i; i < count; i++)
{
    if (p[i] == '\n')
    {
        while (p[i+1] == '\n')
        {i++;}
        if ( i != (count-1) )
        {
            pp[a++] = &p[i+1];
        }
    }
}
qsort (pp, (a-1), sizeof(char*), compare);

我的比较功能

int rot13cmp (const void* c, const void* d)
{
    const char* a = (const char*)c;
    const char* b = (const char*)d;
    if (a[0] == '\0' && b[0] == '\t')
    {
        return -1;
    }
    else if (a[0] == '\t' && b[0] == '\0')
    {
        return 1;
    }
    int k = 0;
    for (;;k++)
    {
        if (a[k] == '\n' && b[k] != '\n')
            return -1;
        if (a[k] != '\n' && b[k] == '\n')
            return 1;
        if (a[k] == '\n' && b[k] == '\n')
            return 0;
        int one = (int)a[k];
        int two = (int)b[k];
        int difference = a[k] - b[k];
        if (difference != 0)
            return difference;
    }
}
WhozCraig

您的比较功能不正确。如果要排序的序列是指针的序列,那么地址传递给你比较有地址指针; 未解决指针。

替换为:

const char* a = (const char*)c;
const char* b = (const char*)d;

有了这个:

const char * const* lhs = c;
const char * const* rhs = d;
const char* a = *lhs;
const char* b = *rhs;

或根据需要简化。函数的其余部分应该正常工作(至少与您编写的一样,我从未检查过它的准确性,只是说onetwo都没有使用并且应将其删除,并且您的函数应该具有最外面的位置return 0;以避免未定义)如果字符串相同,则返回结果)。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

用另一个数组初始化指向数组的指针的点

来自分类Dev

类型的指针指向另一个的指针

来自分类Dev

指向另一个类中对象的指针数组

来自分类Dev

指向另一个类中的对象的指针?

来自分类Dev

结构中的指针指向另一个结构

来自分类Dev

cudamemcpy 指针数组,其中每个指针都指向一个数组

来自分类Dev

设置一个指向结构的指针等于一个函数返回的另一个结构的指针?

来自分类Dev

如何在C中定义一个指向指针数组的指针数组?

来自分类Dev

指向数组的指针与指向数组的第一个元素的指针之间的区别

来自分类Dev

指向另一个类的方法的指针

来自分类Dev

指向存储在另一个地址的地址的指针

来自分类Dev

保持指向另一个类的指针

来自分类Dev

C指向另一个变量的指针

来自分类Dev

指向数组第一个元素的指针的地址?

来自分类Dev

指向数组第一个元素之前的指针

来自分类Dev

如何获得一个指向数组实例内存的指针?

来自分类Dev

如何创建一个指向多维数组的指针?

来自分类Dev

指向数组下一个元素的指针

来自分类Dev

C 指向数组最后一个元素的指针

来自分类Dev

传递一个指向指向 C 结构的指针数组的指针

来自分类Dev

一个指针可以指向另一个指针而不是DNS压缩中的标签吗?

来自分类Dev

Objective-C-指向一个类的指针与指向另一个类的指针是否不同?

来自分类Dev

空指针可以安全地指向另一个指针吗?

来自分类Dev

如何在C ++中使用指针指向另一个指针

来自分类Dev

取消引用指向另一个指针的空指针

来自分类Dev

添加到函数指针,以获得指向另一个函数的指针?

来自分类Dev

C ++删除指向包含另一个指针的对象的指针

来自分类Dev

在另一个指向结构的指针内访问结构的指针内的元素

来自分类Dev

添加到函数指针,以获得指向另一个函数的指针?

Related 相关文章

  1. 1

    用另一个数组初始化指向数组的指针的点

  2. 2

    类型的指针指向另一个的指针

  3. 3

    指向另一个类中对象的指针数组

  4. 4

    指向另一个类中的对象的指针?

  5. 5

    结构中的指针指向另一个结构

  6. 6

    cudamemcpy 指针数组,其中每个指针都指向一个数组

  7. 7

    设置一个指向结构的指针等于一个函数返回的另一个结构的指针?

  8. 8

    如何在C中定义一个指向指针数组的指针数组?

  9. 9

    指向数组的指针与指向数组的第一个元素的指针之间的区别

  10. 10

    指向另一个类的方法的指针

  11. 11

    指向存储在另一个地址的地址的指针

  12. 12

    保持指向另一个类的指针

  13. 13

    C指向另一个变量的指针

  14. 14

    指向数组第一个元素的指针的地址?

  15. 15

    指向数组第一个元素之前的指针

  16. 16

    如何获得一个指向数组实例内存的指针?

  17. 17

    如何创建一个指向多维数组的指针?

  18. 18

    指向数组下一个元素的指针

  19. 19

    C 指向数组最后一个元素的指针

  20. 20

    传递一个指向指向 C 结构的指针数组的指针

  21. 21

    一个指针可以指向另一个指针而不是DNS压缩中的标签吗?

  22. 22

    Objective-C-指向一个类的指针与指向另一个类的指针是否不同?

  23. 23

    空指针可以安全地指向另一个指针吗?

  24. 24

    如何在C ++中使用指针指向另一个指针

  25. 25

    取消引用指向另一个指针的空指针

  26. 26

    添加到函数指针,以获得指向另一个函数的指针?

  27. 27

    C ++删除指向包含另一个指针的对象的指针

  28. 28

    在另一个指向结构的指针内访问结构的指针内的元素

  29. 29

    添加到函数指针,以获得指向另一个函数的指针?

热门标签

归档