为什么我的c prog在打印出一个数组时停止工作

时间:2013-12-28 10:13:35

标签: c arrays fgets

在这个程序中,我正在使用fgets解析csv文件,并根据我对c prog的了解,将文件转换为数组。

因此,当我用printf("%s",input)打印出来时,我得到了这个10,20,30,但是当我包含printf("%s",input[0])时程序停止工作。 这是我正在制作的计划:

#include <stdio.h>
#include <string.h>
#include <stdlib.h>

struct xa 
{
  int x;
  int y;
  int z;
} xo;

int main()
{
    FILE *dudufile;
    char filename[]="dodo.dat";
    char input[1679];
    dudufile=fopen(filename,"r");

    while ( fgets(input,1679, dudufile ) != NULL )
    {
        printf("%s\n",input);
        printf("%s\n",input[0]);
        struct xa;
        xo.y=input[1];
        printf("%d",xo.y);      
    }

    return 0;
}

4 个答案:

答案 0 :(得分:5)

编译警告:

  

警告:格式'%s'需要'char *'类型的参数,   但是参数2的类型为'int'[-Wformat]

应该是:

printf("%c\n",input[0]);

答案 1 :(得分:4)

这是错误的:

printf("%s\n",input[0]);

这里你告诉printf打印一个字符串,但是给一个字符作为参数。这会导致未定义的行为和崩溃。

如果编译器没有对此发出警告,您可能需要启用更多警告。虽然警告消息不是编译器的错误,但它们经常指出代码中的问题,这些问题通常会导致未定义的行为。

答案 2 :(得分:2)

input[0]不是字符串(%s期望的内容),而是char。如果要打印该字符,则需要使用%c格式说明符。

答案 3 :(得分:2)

好吧,input[0]不是%s想要的字符串指针。

如果您想打印一个单个字符,则应使用%c