如何声明指向char*数组的指针数组

如何声明指向char*数组的指针数组,c,C,问题是访问指针数组的每个地址时,会将我的数据合并到后续的数据中 正如在备注中所说,数组不是以空字符结尾的,这就是为什么printf在它们之后继续 得到这个结果是因为编译器将数组一个接一个地放在内存中,最后由于其他原因出现了一个空字符 所以最小的变化是 unsigned char mydata1[] = {0x41,0x42,0x43, 0}; unsigned char mydata2[] = {0x44,0x45,0x46, 0}; unsigned char mydata3[] = {0x4

问题是访问指针数组的每个地址时,会将我的数据合并到后续的数据中


正如在备注中所说,数组不是以空字符结尾的,这就是为什么printf在它们之后继续

得到这个结果是因为编译器将数组一个接一个地放在内存中,最后由于其他原因出现了一个空字符

所以最小的变化是

unsigned char mydata1[] = {0x41,0x42,0x43, 0};
unsigned char mydata2[] = {0x44,0x45,0x46, 0};
unsigned char mydata3[] = {0x47,0x48,0x49,0x4A, 0}
但这样做的前提是编译器使用ASCII代码,这是不可读的,最好这样做

unsigned char mydata1[] = {'A', 'B', 'C', 0};
unsigned char mydata2[] = {'D', 'E', 'F', 0};
unsigned char mydata3[] = {'G','H','I','J', 0};
或者更简单:

unsigned char mydata1[] = "ABC";
unsigned char mydata2[] = "DEF";
unsigned char mydata3[] = "GHIJ";
除此之外

做fori=0;i<3;i++是危险的,因为如果将元素数修改为charPtr,则还需要修改for,一种方法是添加一个空指针以标记指针列表的末尾,并迭代到一个空指针,另一种方法是在i请以文本形式发布代码。C中的字符串以NULL结尾。将“\0”添加到每个字符的末尾。您的字符数组不是C字符串,因为它们不是以null结尾的。请编辑您的文章,并将实际内容显示为文本而不是屏幕截图。其他人无法从您的图像复制和粘贴。详情请参见此处
#include <stdio.h>
#include <string.h>

/* String are NULL terminated, you might have read comments in question */
unsigned char mydata1[] = {0x41, 0x42, 0x43, 0x00};
unsigned char mydata2[] = {0x44, 0x45, 0x46, 0x00};
unsigned char mydata3[] = {0x47, 0x48, 0x49, 0x4A, 0x00};

/* Here I have used a NULL terminated array so that we can traverse 
 * even if we do not know the length of array 
 */
unsigned char *charPtr[] = 
{
        mydata1,
        mydata2,
        mydata3,
        NULL
};

int main()
{
        int i;

        for (i = 0; charPtr[i] != NULL; i++) {
                printf("%s\n", charPtr[i]);
        }

        return 0;
}