[英]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.