【问题标题】:How to set a char 'a' to a char pointer array?如何将 char 'a' 设置为 char 指针数组?
【发布时间】:2017-09-05 00:14:50
【问题描述】:

我正在尝试弄清楚如何使用指针。

我对如何将单个字符插入 char *line2[80] 感到困惑

这甚至可以在不引用另一个指针的内存位置的情况下做到这一点吗?

我的想法是,在 *line2[0] = 'a' 处,字符 'a' 将位于数组的索引 0 处。

这与 line[0] = 'a' 有何不同

#include <stdio.h>

void returnValue(void);

int main(void){
    returnValue();

}


void returnValue(){
    char line[80];
    line[0] = 'a';
    line[1] = '\0';
    printf("%s",line);

    char* line2[80];
    *line2[0] = 'a';
    *line2[1] = '\0';
     printf("%s",*line2); //program crashes
}

【问题讨论】:

    标签: c arrays pointers printf


    【解决方案1】:

    当你分配

    char* line2[80];
    

    您正在分配一个 80 个字符指针的数组

    当你使用时

    *line2[0] = 'a';
    

    您正在引用未定义的行为。这是因为您正在分配指针line2[0],但指针未初始化并且可能未指向内存中的任何有效位置。

    您需要初始化指向内存中某个有效位置的指针才能使其工作。执行此操作的典型方法是使用 malloc

    line2[0] = malloc(10); // Here 10 is the maximum size of the string you want to store
    *line2[0] = 'a';
    *(line2[0]+1) = '\0';
    printf("%s",*line2);
    

    您在上述程序中所做的是分配一个 C 字符串的二维数组。 line2[0] 是第一个字符串。同样,您可以再分配 79 个字符串。

    【讨论】:

    • 还有一点需要注意。使用 malloc 时必须添加头文件#include 。我相信 Malloc 是内存分配的缩写。只是想添加以供将来参考。谢谢你。 +1
    • 不还是一维数组吗?二维数组不是 char* line2[80][80] 吗?或者这是指针独有的东西?
    • @pewpew 这将是一个二维字符指针数组,对于二维字符数组使用char line2[80][80]
    • 你可以使用line2[0][1],它可能比*(line2[0]+1)更具可读性。
    【解决方案2】:

    你一定已经读过了,指针是c中的一个特殊变量,它存储了另一个相同datatype的变量的地址。

    例如:-

    char a_character_var = 'M'; 
    char * a_character_pointer = &a_character_var; //here `*` signifies `a_character_pointer` is a `pointer` to `char datatype` i.e. it can store an address of a `char`acter variable  
    

    在你的例子中也是如此

    char* line2[80];80 char 指针的数组

    用法

    line2[0] = &line[0];
    

    您可以通过编写*line2[0] 来访问它,这将产生a 作为输出

    【讨论】:

    • 如果它们都是数组,你将如何将 a_character_pointer 设置为 a_character_var? char * a_character_pointer[0] = a_character_var[0]?如果数组更大怎么办?
    • 您只需将您想要的变量的BaseAddress(无论是普通的variable 还是array)初始化为pointerdereference,只需通过增加pointer 位置并读取它的值
    猜你喜欢
    • 1970-01-01
    • 2021-01-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-05
    • 1970-01-01
    • 2015-10-26
    • 1970-01-01
    相关资源
    最近更新 更多