【发布时间】:2019-05-21 22:27:38
【问题描述】:
我目前正在从事一个从输入文件中读取字符串并将它们存储到数组中的项目。 当它存储到数组中时,我想删除空格,以便我可以将数组中的字符串与数组 stringcards 进行比较,并检查输入文件中的所有卡片是否都在那里。
但我目前被困在存储没有数组空间的新字符串并将它们打印出来。
它打印出第一个字符串REDA,但之后我得到一个分段错误。
如果有人能给我任何提示,告诉我如何将卡片数组中的字符串与常量数组进行比较并检查所有卡片是否都在数组中,我将不胜感激。
我希望这是正确的方法。
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
const char * stringcard[] = { "REDA","RED2"
"RED3"
"RED4"
"RED5"
"RED6"
"RED7"
"RED8"
"RED9"
"RED10"
"REDJ"
"REDQ"
"REDK"
};
int main (int argc, char **argv) {
char *reds[13];
char * cardarray[13];
int i;
FILE *file = argc > 1 ? fopen (argv[1], "r") : stdin;
if (file == NULL)
return 1;
if(argc!=2) {
printf("[ERR]");
return 0;
}
for (i =0; i < 13; i++) {
reds[i] = malloc( 8);
fgets(reds[i], 8, file);
}
int i2 = 0;
for (i =0; i < 13; i++) {
printf ("%s", reds[i]);
}
for(i= 0; i<13; i++) {
char *p = strtok (reds[i], " ");
while (p != NULL)
{
cardarray[i2++] = p;
p = strtok (NULL, " ");
}
}
for (i =0; i < 13; i++) {
printf ("%s", cardarray[i]);
}
return 0;
}
输入文件:
RED A
RED 2
RED 3
RED 4
RED 5
RED 6
RED 7
RED 8
RED 9
RED 10
RED J
RED Q
RED K
【问题讨论】:
-
提示:不要使用“魔法”数字。这是一种非常糟糕和危险的做法。
13是什么?malloc(sizeof(char) * (4 + 1)中的4 + 1是什么?使用常量。 -
13是数组的大小,(4+1)是最大字符串长度 4 + null 终止符@Jabberwocky -
@xing 应该是
reds[i] = malloc(sizeof(char) * (7 + 1))? -
@momonosuke 是的,我知道,但这是一种危险的做法。当您的卡片数量从 13 变为 15 时(无论出于何种原因),您需要将代码中的
13更改为15。使用常量并更改一次值。
标签: c arrays string file dynamic