c - 声明一个二维字符串数组

标签 c arrays string char

我现在想知道这是否是在 C 中声明字符串数组的正确方法,如下所示:

#include <stdio.h>
#include <string.h>
#define rows 6
#define colu 2

char* bdato [rows][colu]={/*here using the pointer, I'm not sure*/
{"tc","Torta Cubana  "},
{"th","Torta Huatulco"},
{"tm","Torta Mexicana"},
{"tr","Torta Rusa    "},
{"r ","Refresco      "},
{"a ","Agua sabor    "}};

int impri(){
  int x;
  for (x=0;x<6;x+=1) {
    printf("%s %s \n",bdato[x][0],bdato[x][1]);
  }
  return 0;
}

最佳答案

从语法上看,它是正确的。尽管每当声明指向字符串文字的指针时,都应该将其声明为 const,因为尝试修改字符串文字的内存位置是未定义的行为(错误)。

如果您需要其他人查看您的代码(例如,在询问有关 SO 的问题时),养成用英语命名变量和函数的习惯也是明智之举。

至于这样存储数据是否正确,取决于你想用这些数据做什么。如果您希望字符串彼此相关,就像在简单的数据库中一样,那么最好创建一个一维结构数组,以显示字符串对是相关的:

typedef struct
{
  const char* something;
  const char* something_else;
} my_struct_t;

my_struct_t  data [X] = 
{
  {"tc","Torta Cubana  "},
  {"th","Torta Huatulco"},
  ...
};

(当然,在实际应用程序中,您可以为变量指定更有意义的名称)

关于c - 声明一个二维字符串数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29886671/

相关文章:

c++ - C - 在控制台应用程序中使用鼠标和键盘,无需等待按任意键

javascript - 按另一个对象对对象(字符串)进行排序

Javascript 在插入数组之前检查重复项

string - Perl:返回字符串的最高匹配百分比

c - 未初始化的局部变量是静态的吗?

c - 如何使我的哈希算法更快

ios - 在 Objective C 中创建 JSON 数组

mysql - 如何在其中一列中选择具有特定数字的行?

java - 从java中的字符串获取 float 或整数值

c - 为什么使用参数时要使用指针?