【发布时间】:2020-09-16 22:00:49
【问题描述】:
打印正确,但我感到困惑的是,每当我只写 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是一个字符串数组,它的类型是const char * const[8]。为什么您希望能够将数组msg用于%s格式? -
发布的代码正确。弗拉德解释了原因。
-
使用
for(option=1;option<=sizeof(msg)/sizeof(char *);++option)而不是for(option=0;option<=sizeof(msg)/sizeof(char *)-1;++option)的有争议的使用方式,这里的表达式显然是在编译时计算的常数值,并在循环中引入术语option-1最终可以不要在不太聪明的编译器上进行优化。
标签: c function printf c-strings conversion-specifier