我正在尝试创建数据结构:
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!=芝加哥)。我考虑过使用strncmp作为前三个字母左右,但这似乎不是一个很好的解决方案。在将argv []发送到相关函数之前,是否有一种简单的方法可以将argv []修改为不包含.txt?或者有没有更好的解决方法,我还没有考虑过?
答案 0 :(得分:1)
不要尝试改变传递的参数。首先将它们复制到局部变量。此示例从提供的参数中删除.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 ("%s\n", fname);
return 0;
}
答案 1 :(得分:1)
您不需要(也不应该)修改任何内容,只需检查您关注的字符即可,如下所示:
鉴于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
如何工作:在C中你可以做指针算术strchr找到.
的位置,然后我们计算一个字符串与strncmp比较多长时间。