为什么不在打印中使用msg代替msg [pointer -1]?

问题描述 投票:0回答:1

它打印正确,但是我感到困惑的是,每当我写msg时,它就会给我你的@@,而每当我写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;
}
c function
1个回答
0
投票

转换说明符%s设计为输出字符串。它需要一个类型为char *的参数。

[msg数组的声明类似于

static const char * const msg[] = {
//...

即其元素的类型为char *。表达式中使用的数组本身的类型为char **

访问数组的元素的索引的有效范围是[ 0, sizeod( msg ) / sizeof( char * ) )

在此循环中

  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]);

即输出从数组字符串中选择的内容。

© www.soinside.com 2019 - 2024. All rights reserved.