我有一个文本文件,它的值(我通常称它们为 upc_values)为
01080006210
69685932764
40000114485
40000114724
07410855329
72908100004
66484101000
04000049163
43701256600
99999909001
07726009493
78732510053
78732510063
78732510073
78732510093
02842010109
02842010132
78732510213
02410011035
73999911110
char *UPC_val = "99999909001";
char upcbuf[100][12];
char buf[12];
memset(buf,0,sizeof(buf));
memset(upcbuf,0,sizeof(upcbuf));
当我尝试 fgets 时,我将其存储在 2D 缓冲区中。
while ( fgets(buf, sizeof(buf), f) != NULL ) {
strncpy(upcbuf[i], buf, 11);
i++;
}
我尝试打印缓冲区中的数据。
puts(upcbuf[0]);
upcbuf[0] 在连续流中有整个数据,
0108000621069685932764400001144854000011472407410855329729081000046648410100004000049163437012566009999990900107726009493787325100537873251006378732510073787325100930284201010902842010132787325102130241001103573999911110
我想将此 upc 值(11 位)与另一个字符串(11 位)进行比较。我用过,
if(strncmp(UPC_Val,upcbuf[i],11) == 0)
{
//do stuff here
}
它没有正常工作,我太喜欢用strstr()了,
if(strstr(upcbuf[0],UPC_val) != NULL)
{
//do stuff here
}
我完全不知道它在做什么,我是否正确地进行了比较? 怎么办,请帮忙?
提前致谢。
最佳答案
要将一行 11 位数字和一个 '\n'
读入一个 string 需要一个至少包含 13 位的数组来存储 string。没有理由如此紧张。建议 2x 预期的最大尺寸
char upcbuf[100][12]; // large enough for 100 * (11 digits and a \0)
...
#define BUF_SIZE (13*2)
char buf[BUF_SIZE];
while (i < 100 && fgets(buf, sizeof buf, f) != NULL ) {
去掉潜在的尾部 '\n
'
size_t len = strlen(buf);
if (len && buf[len-1] == '\n') buf[--len] = '\0';
检查长度并以某种方式处理它。
if (len != 11) exit(EXIT_FAILURE);
保存/打印数据
// strncpy(upcbuf[i], buf, 11); // fails to insure a null character at the end
strcpy(upcbuf[i], buf);
i++;
puts(upcbuf[i]);
比较字符串
if(strcmp(UPC_Val,upcbuf[i]) == 0) {
// strings match
}
关于c - 如何从文件中获取字符串并存储在二维字符数组中,并将该二维字符数组与 C 中的字符串进行比较?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45889540/