【问题标题】:How to assign 2D string array to char pointer array?如何将二维字符串数组分配给 char 指针数组?
【发布时间】:2015-11-28 05:26:27
【问题描述】:

我一直在尝试将 char words[x][y] 分配给 char* 指针[x]。但是编译器给了我一个错误

数组类型 'char *[5]' 不可赋值 指针 = &words[0]

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

int main(){
    char words[5][10]={"Apple", "Ball", "Cat", "Dog", "Elephant"};
    char *pointer[5];
    pointer = &words[0];
    char **dp;
    dp = &pointer[0];

    int n;
    for(n=0; n<5; n++){
        printf("%s\n", *(dp+n));
    }
return 0;
}

但是代码可以正常工作

char *pointer[5]={"Apple", "Ball", "Cat", "Dog", "Elephant"};
char **dp;
dp = &pointer[0];

我需要的只是将二维数组正确分配到指针数组中!!

【问题讨论】:

    标签: c arrays pointers pointer-to-pointer


    【解决方案1】:

    很遗憾,您无法按照自己的方式进行操作。 char words[5][10] 不会将指针本身存储在任何地方,它实际上是一个 50 个字符的数组。 sizeof(words) == 50

    在内存中,它看起来像:

    'A','p','p','l','e','\0',x,x,x,x,'B','a'...
    

    这里没有地址。当你做 words[3] 时,就是(words + 3),或者(char *)words + 30

    另一方面,char *pointer[5] 是一个由五个指针组成的数组,sizeof(pointer) == 5*sizeof(char*)

    因此,您需要通过计算偏移量来手动填充 pointer 数组。像这样的:

    for (int i = 0; i < 5; i++) pointer[i] = words[i];
    

    【讨论】:

      【解决方案2】:

      pointer = &amp;words[0]; 上的错误发生是因为您正在使用“指针数组”并使其指向第一个字符数组,因为指针指向 char 这没有任何意义。尝试类似:

      char *pointer[5];
      pointer[0] = &words[0][0];
      pointer[1] = &words[1][0];
      //...
      

      这将使您的指针指向字符串的第一个 char(我认为这是所需的行为?)

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2021-12-07
        • 2021-07-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-10-06
        • 1970-01-01
        相关资源
        最近更新 更多