【问题标题】:Declare a bi-dimensional array of strings声明一个二维字符串数组
【发布时间】:2015-04-27 03:26:28
【问题描述】:

如果这是在 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;
}

【问题讨论】:

  • 我在互联网上查看并阅读这样的内容不是一种正确的声明方式,因为我不是只读取方向的数据,而且使用 malloc 更好,但我正在学习,所以我不确定。这是我学习编程的第一周
  • 这取决于你想做什么。它与一维数组基本相同。见herehere
  • 有些人会坚持使用const关键字更正确,即const char *bdato[rows][colu]={
  • 谢谢大家,我这个周末我尝试从这门语言中学习我能学到的一切,这是我第一次尝试学习,我很高兴C:
  • 对于您的代码,您甚至不需要包含 string.h...

标签: c arrays string char


【解决方案1】:

语法上是正确的。尽管每当您声明指向字符串文字的指针时,都应将其声明为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"},
  ...
};

(当然,在实际应用中,您会给变量起更有意义的名称)

【讨论】:

    猜你喜欢
    • 2011-04-18
    • 2014-01-14
    • 2012-06-01
    • 2015-05-26
    • 1970-01-01
    • 1970-01-01
    • 2022-01-15
    • 2010-12-21
    相关资源
    最近更新 更多