【问题标题】:Can I copy string from two dimensional array to one dimensional array (Array&Pointers)我可以将字符串从二维数组复制到一维数组(数组和指针)
【发布时间】:2019-02-10 07:19:09
【问题描述】:

我发现将字符串从二维数组复制到一维数组非常棘手。所以我通过地址访问了这些值。它在 for 循环中运行良好。一维数组真的是用二维数组值复制的吗?

char *str[4] = {"i " "California", "ii " "Texas", "iii " "Florida", "iv " "Washington"};        //two dimensional array
int r = 0, c, i = 0;
char *temp;      //one dimesional array

for(r = 0; r < 4; r++){
    c = 0;
    while(*(str[r]+c) != '\0'){
        printf("%c", *(str[r]+c));
        c++;
        temp = &str[r][c];
        printf("%c", *temp);
    }
    printf("\n");
}

return 0;

【问题讨论】:

    标签: c arrays string pointers


    【解决方案1】:

    您可以使用 calloc 分配临时指针内存大小。

    #include<stdio.h>
    #include <stdlib.h>
    #include<string.h>
    
    int main()
    {
        char *str[4] = {"i " "California", "ii " "Texas", "iii " "Florida", "iv " "Washington"};        //two dimensional array
        int r = 0;
    
        for(r = 0; r < 4; r++)
        {
            char *temp = (char*) calloc (strlen(str[r]) ,sizeof(char));
            strcpy(temp, str[r]);
            printf("%s", str[r]);
            printf("\n");
            free(temp);
        }
        return 0;
    }
    

    【讨论】:

    • 在 C 中,任何堆分配函数的返回类型:callocreallocmalloc1) 具有类型void*,可以分配给任何其他指针。强制转换只会使代码混乱,使其更难以理解、调试等。建议删除强制转换。 2) 始终检查 (!=NULL) 返回值以确保操作成功。
    【解决方案2】:

    假设:

    char array2dim[x][y];
    

    然后创建一个一维数组..

    char array1dim[x*y];
    
    memcpy( array1dim, array2dim, x*y );
    

    【讨论】:

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