c - 分配值表而不更改变量名称或编写花哨的代码

标签 c arrays variables char redefinition

这是我正在处理的代码示例。

switch(n){
  case 1:
      char tcol[4][100]={"Canadian Order","Achat Francais","china"};
      char trow[7][100]={"Item","Price","Qty","Total","Tax","Grand total"};
      Htable(trow,tcol,7,4,"");
      break;
  case 2:
      char tcol[3][100]={"Other column 1","2nd column"};
      char trow[4][100]={"1st row","2nd row","Row 3"};
      Htable(trow,tcol,4,3,"");
      break;
  case n:
  ...
}

基本上,我正在创建一个函数 Htable,它获取 HTML 表的行名称和列名称,第三个和第四个参数是行数和列数。

我遇到的问题是编译器认为我正在重新定义数组,即使每个定义只能从 switch 分支访问一次。错误如下:

./html2.c:118: error: redefinition of ‘tcol’                          
./html2.c:110: error: previous definition of ‘tcol’ was here          
./html2.c:119: error: conflicting types for ‘trow’                    
./html2.c:111: error: previous declaration of ‘trow’ was here        

对于我拥有的每个代码块来说,这种情况不断发生。我能想到的唯一部分解决方案如下:

char tcol[1][4][100]={"Canadian Order","Achat Francais","china"};
char trow[1][7][100]={"Item","Price","Qty","Total","Tax","Grand total"};

char trow[2][4][100]={"1st row","2nd row","Row 3"};
char tcol[2][4][100]={"Other column 1","2nd column"};

switch(n){
  case 1:
      Htable(trow[1],tcol[1],7,4,"");
      break;
  case 2:
      Htable(trow[2],tcol[2],4,3,"");
      break;
  case n:
  ...
}

有没有一种简单的方法可以让 C 编译器接受它,而无需添加花哨的代码来分隔字符串?

最佳答案

Is there a simple way to do this where the C compiler accepts it without having to add fancy code to separate the strings?

在单独的子 block 中声明对象tcol, trow@WhozCraig

void foo(int n) {
  switch (n) {
    case 1: { // add {
      char tcol[4][100] = {"Canadian Order", "Achat Francais", "china"};
      char trow[7][100] =
          {"Item", "Price", "Qty", "Total", "Tax", "Grand total"};
      Htable(trow, tcol, 7, 4, "");
      break;
    } // add }
    case 2: { // add {
      char tcol[3][100] = {"Other column 1", "2nd column"};
      char trow[4][100] = {"1st row", "2nd row", "Row 3"};
      Htable(trow, tcol, 4, 3, "");
      break;
    } // add }
  }
}

请注意,tcol 的生命周期仅限于 block 。使static永远持续下去。但我怀疑,根据更大的代码,可能需要一种新的方法 - 一些奇特

<小时/>

抛开大小优化:考虑形成一个指向字符串的指针数组。

      // char tcol[4][100] = {"Canadian Order", "Achat Francais", "china"};
      const char *tcol[] = {"Canadian Order", "Achat Francais", "china", NULL};

还需要对 Htable() 进行更改。

关于c - 分配值表而不更改变量名称或编写花哨的代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56159825/

相关文章:

variables - 什么类型的变量包含一个范围?

c++ - 如何从Lua运行进程中读取变量值(获取进程变量值)?

c - 在 C 语言中,如何判断函数是否提供了参数?

c - 在 C 中的数组末尾添加不需要的字符

对象 "like"Filter 的 JavaScript 一维数组

java - 数组转换为堆栈

php - 将变量传递到 php 文件时出现问题

c - 通过网络发送 Big Endian 格式的二进制文件

c - 使用指针在结构中输入

c - 使用通用字段初始化结构的通用 API