繁体   English   中英

如何在C中将char [n] [length + 1]转换为常量字符串数组?

[英]How to cast char[n][length+1] to constant array of strings in C?

我要建立的数组最多包含20个长度为10的字符串

char buffer[10][20] = {0};
//populate the buffer with 10 strings
//after this point, no more changes to the buffer allowed
//make a new pointer to indicate that I want the buffer finalized
const char **finalized = buffer;

但是前一个失败并显示警告

 warning: initialization from incompatible pointer type [-Wincompatible-pointer-types]

用单个字符串做类似的事情

char buffer[20] = {0};
//populate the buffer
const char *finalized = buffer;

在第一种情况下,正确的投射方法是什么?

无法将常规2D数组“投射”为指针到指针类型。 这些类型是完全不兼容的,并且具有完全不同的语义。 您可以强制执行强制转换,但无论如何结果将是无用的。

正式地,在这种情况下,正确的指针类型是char (*)[20]

char (*finalized)[20] = buffer;

除了C语言的const正确性规则不允许您在其中添加const 你可以强制

const char (*finalized)[20] = (const char (*)[20]) buffer;

你也可以

char (*finalized)[10][20] = &buffer;

这是否对您有用-我不知道,因为您没有提供有关用途的任何详细信息。

如果您具有2D数组,则不能简单地将其转换为指向指针的指针。 指针和数组不一样。

如果您希望长度大于19的字符串,则在这种情况下,需要使用@AnT指出的char (*)[20]来使字符串数灵活。

注意:使用20作为维度表示您最多可以包含19字符,因为一个空格必须占据空终止字符\\0

这是一个例子:

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

#define STRLEN 20
#define NUMSTR 10

int main(void) {
    char buffer[NUMSTR][STRLEN];

    strcpy(buffer[0], "Hello");
    strcpy(buffer[1], "World");

    char (*finalized)[STRLEN] = buffer;

    printf("%s %s!\n", finalized[0], finalized[1]);

    return 0;
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM