【问题标题】:How to convert properly char * const[256] to const char * const*如何正确地将 char * const[256] 转换为 const char * const*
【发布时间】:2025-12-14 18:00:01
【问题描述】:

我有这个结构:

typedef struct cmdLine {
char * const arguments[256];
} cmdLine;

我还有一个论点cmdLine *pCmdLine。我想使用execv所以我写execv((pCmdLine->arguments[0]), pCmdLine->arguments);。第二个参数不适合execv,我想问一下如何正确转换它。

我得到的警告是:将“char* const[256]”传递给“const char *const *”类型的参数会丢弃嵌套指针类型中的限定符。我会撒谎寻求一些帮助以正确转换它,谢谢。

【问题讨论】:

  • 为什么你不能让它成为合适的类型(char const * const[256])?
  • 因为cmdLine 是我作为项目要求获得的结构。
  • 有趣...POSIX 标头将execv 的原型列为int execv(const char *path, char *const argv[]); - 你的目标是什么系统?
  • Windows 10 @AnttiHaapala

标签: c pointers casting constants execv


【解决方案1】:

我没有发现任何问题:

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

#include <stdio.h>

struct
{
char * const arr[20];
}*str;

void foo(char  *const par[])
{
    volatile const char * const ptr = par[4]; 
    printf("%s\n", par[7]);
    printf("%s\n", ptr);
}


void foo1()
{
    foo(str -> arr);
}

https://godbolt.org/z/4Sv4a8

【讨论】: