为什么不在打印中使用 msg 而不是 msg[pointer -1]?
Why don't use msg in printing instead of msg[pointer -1]?
打印正确,但我感到困惑的是,每当我只写 msg,它就会给我 Your ?@ 以及每当我写msg[option-1],它给了我 你的名字是 bilal 的完整信息。我不理解 [option-1] 的原因。为什么使用它,它的作用是什么?
#include <stdio.h>
#define MAX_LEN 256
int main(){
FILE * fp = fopen("file.txt","r");
int option;
char word[MAX_LEN];
static const char * const msg[] = {
"Name",
"Date of Birth",
"ID Card Number",
"Phone Number",
"Address",
"Account",
"Fixing Year",
"Amount" };
for (option = 1; option <= sizeof(msg)/sizeof(char *); ++option)
printf("%d. Your %s:\n", option, msg[option-1]);
fclose(fp);
return 0;
}
转换说明符%s
是为输出字符串而设计的。它需要 char *
类型的参数。
数组msg
声明为
static const char * const msg[] = {
//...
即其元素的类型为 char *
。表达式中使用的数组本身具有 char **
类型。因此它可以提供给转换说明符 %s
.
访问数组元素的索引的有效范围是 [ 0, sizeod( msg ) / sizeof( char * ) )
,而在下面显示的循环中,索引变量从 [1, sizeof( msg ) / sizeod( char * ) + 1 )
.
更改
就是在这个循环中
for (option = 1; option <= sizeof(msg)/sizeof(char *); ++option)
索引从 1 开始。因此,要正确输出数组的元素,您必须使用表达式 option - 1
作为索引,并且表达式 msg[option-1] 具有所需的类型 char *
是 prontf 调用的转换说明符所期望的。
printf("%d. Your %s:\n", option, msg[option-1]);
即输出从数组中选择的字符串
打印正确,但我感到困惑的是,每当我只写 msg,它就会给我 Your ?@ 以及每当我写msg[option-1],它给了我 你的名字是 bilal 的完整信息。我不理解 [option-1] 的原因。为什么使用它,它的作用是什么?
#include <stdio.h>
#define MAX_LEN 256
int main(){
FILE * fp = fopen("file.txt","r");
int option;
char word[MAX_LEN];
static const char * const msg[] = {
"Name",
"Date of Birth",
"ID Card Number",
"Phone Number",
"Address",
"Account",
"Fixing Year",
"Amount" };
for (option = 1; option <= sizeof(msg)/sizeof(char *); ++option)
printf("%d. Your %s:\n", option, msg[option-1]);
fclose(fp);
return 0;
}
转换说明符%s
是为输出字符串而设计的。它需要 char *
类型的参数。
数组msg
声明为
static const char * const msg[] = {
//...
即其元素的类型为 char *
。表达式中使用的数组本身具有 char **
类型。因此它可以提供给转换说明符 %s
.
访问数组元素的索引的有效范围是 [ 0, sizeod( msg ) / sizeof( char * ) )
,而在下面显示的循环中,索引变量从 [1, sizeof( msg ) / sizeod( char * ) + 1 )
.
就是在这个循环中
for (option = 1; option <= sizeof(msg)/sizeof(char *); ++option)
索引从 1 开始。因此,要正确输出数组的元素,您必须使用表达式 option - 1
作为索引,并且表达式 msg[option-1] 具有所需的类型 char *
是 prontf 调用的转换说明符所期望的。
printf("%d. Your %s:\n", option, msg[option-1]);
即输出从数组中选择的字符串