声明一个二维字符串数组
Declare a bi-dimensional array of strings
我现在想知道这是否是在 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 中声明字符串数组的正确方法,如下所示:
#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"},
...
};
(当然在实际应用中你会为变量起更有意义的名字)