我试图把每3个字符(不是空格).in到一个数组,但我收到这些错误:

时间:2017-09-28 01:50:05

标签: c

test2.c: In function 'main':
test2.c:28:3: warning: format '%s' expects a matching 'char *' argument [-Wformat=]
   while( fscanf(fp, "%s%s%s" , str)){
   ^
test2.c:28:3: warning: format '%s' expects a matching 'char *' argument [-Wformat=]

和分段错误。

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

#define ARRAY_LIMIT 4
#define MAX 100

int main(int argc, char const *argv[]) {   
    char* array[MAX];
    char str[ARRAY_LIMIT];  
    if (argc != 2)
    {
        printf( "Wrong number of arguments.");
        return 1;
    }

    FILE *fp = fopen(argv[1], "r");

    if (fp == 0){
        printf ("failed to open input.txt\n");
        exit(1);
    }

    int j = 0;
    while( fscanf(fp, "%s%s%s" , str)){
      array[j] = (char *)malloc(sizeof(char)*3); 
      strcpy(array[j], str); 
        j++;
    }
        printf( "%s\n", array[0]); 
        fclose(fp);
        return 0;
    }

1 个答案:

答案 0 :(得分:0)

要阅读长度为3的一个字符串,请使用"%3s",而不是"%s%s%s"。 段错误来自您的EOF检查问题。你应该将它作为循环条件:

fscanf(fp, "%3s", str) != EOF

您还没有分配足够大的字符串。它们的大小应为sizeof(char)*4,因为它有一个空的终止字节(在评论中归功于BLUEPIXY)。