【发布时间】:2012-05-02 20:18:47
【问题描述】:
我在解析 argv 变量时遇到了 C 语言问题。这是任务:
我从命令行获取了一些参数到我的 C 程序中。其中一个看起来像“-r=20-5”。在那里我必须找到“r”。这适用于:
if (argv[i][0] != 0 && argv[i][1] != 0 && argv[i][2] != 0 &&
argv[i][0] == '-' && argv[i][2] == '=') { /* Check the Variables */
switch (argv[i][1]) {
case 'r':
/* what have to be here? */
break;
}
现在我有了“r”。但我也需要两个不同变量中的 20 和 5。这是我的想法,但它没有用。我尝试了
strsep(argv[i]+3, "-");
但我的编译器 (Xcode) 会引发警告(警告:从不兼容的指针类型传递 'strsep' 的参数 1)
有没有人知道(或链接)我如何解决这个问题?
解决后仍然有警告,所以我得到答复以发布我的整个新代码:
int parse(int argc, const char *argv[]) {
int i, x, y;
int intTmp;
long longTmp;
char *strTmp;
char *end;
for (i = 1; i < argc; i++) {
/* check for (-?=) */
if (argv[i][0] != 0 && argv[i][1] != 0 && argv[i][2] != 0 &&
argv[i][0] == '-' && argv[i][2] == '=') {
/* IGNORE THIS
* longTmp = strtol(argv[i]+3, &end, 10);
* intTmp = analyseEndptr(longTmp, argv[i]+3, end);
*/
switch (argv[i][1]) {
case 'r':
strTmp = argv[i]+3; /* <= Here I got the warning */
x = atoi(strsep(&strTmp, "-"));
y = atoi(strsep(&strTmp, "-"));
printf("x=%d, y=%d\n", x, y);
break;
}
}
}
}
警告是:警告:从不兼容的指针类型传递 'strsep' 的参数 1
我的编译器是:gcc on MacOS using XCode as IDE
【问题讨论】:
-
strsep将char **作为其第一个参数,而不是char * -
或者您可以编写自己的解析器。这将需要一些时间,但它会按您的意愿工作。您需要做的只是遍历字符串。作为分隔符,您可以使用“-”符号。
-
@Paul R 如何从 char* 中获取 char**? (我很快用谷歌搜索,但没有好的结果)
标签: c string parsing strtok strsep