C:通过 argv[] 将文件名加载到结构中,但我不想要文件类型(例如,.txt)?



我正在尝试创建一个数据结构:

typedef struct node_ {
    char* fName;
    char* lName;
    char* origin;
    char* destination;
    int seatNumber;
    struct node_* next;
} Seat;

通过从.txt文档逐行扫描。来源是文档的名称,例如chicago.txt。

我刚刚向我的函数发送了argv[I](同样是文件名,例如chicago.txt)作为原点。这是有效的,但是。。。

现在我需要检查来源是否是目的地,但目的地的格式不是.txt。(例如,chicago.txt!=chicago)。我考虑过在前3个字母左右使用strncmp,但这似乎不是一个好的解决方案。在将argv[]发送到有问题的函数之前,有没有一种简单的方法可以将其修改为不包含.txt?或者有没有更好的方法来解决我没有考虑过的问题?

不要尝试更改传递的参数。首先将它们复制到局部变量中。此示例从提供的参数中删除.txt扩展名。

#include <stdio.h>
#include <string.h>
char fname [100];
int main (int argc, char *argv[]) {
    char *xptr;
    if (argc < 2) return 1;
    strncpy (fname, argv[1], 99);
    strlwr (fname);
    xptr = strstr (fname, ".txt");
    strncpy (fname, argv[1], 99);       // copy arg again to restore orig case
    if (xptr != NULL)
        *xptr = 0;                      // truncate string
    printf ("%sn", fname);
    return 0;
}

您不需要(也不应该)修改任何内容,只需检查您关心的字符就可以了,如下所示:

假定str1是具有.的字符串,str2是我们想要比较的字符串:

int result = 0; // will be 1 if same
char *found;
found = strchr(str1,'.');
if (found)
{
   if (strncmp(str1,str2,found-str1) == 0)
     result = 1;
}

注意,我没有测试,所以您可能需要在表达式found-str1 中添加1

工作原理:在C中,您可以进行指针运算strchr找到.的位置,然后我们计算出字符串与strncmp的比较长度。

相关内容

最新更新