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;
}
答案 0 :(得分:0)
要阅读长度为3的一个字符串,请使用"%3s"
,而不是"%s%s%s"
。
段错误来自您的EOF检查问题。你应该将它作为循环条件:
fscanf(fp, "%3s", str) != EOF
您还没有分配足够大的字符串。它们的大小应为sizeof(char)*4
,因为它有一个空的终止字节(在评论中归功于BLUEPIXY)。