谁帮忙改下程序,已经想了很多天了
#include <stdio.h>
#include <stdlib.h>
#include <errno.h>
#include <string.h>
int makeargv(const char *s, const char *delimiters, char ***argvp);
int main(int argc, char *argv[]) {
char delim[] = " t";
int i;
char **myargv;
int numtokens;
if (argc != 2) {
fprintf(stderr, "Usage: %s stringn", argv[0]);
return 1;
}
if ((numtokens = makeargv(argv[1], delim, &myargv)) == -1) {
fprintf(stderr, "Failed to construct an argument array for %sn", argv[1]);
return 1;
}
printf("The argument array contains:n");
for (i = 0; i < numtokens; i++)
printf("%d:%sn", i, myargv[i]);
return 0;
}
int makeargv(const char *s, const char *delimiters, char ***argvp) {
int error;
int i;
int numtokens;
const char *snew;
char *t;
if ((s == NULL) || (delimiters == NULL) || (argvp == NULL)) {
errno = EINVAL;
return -1;
}
*argvp = NULL;
snew = s + strspn(s, delimiters); /* snew is real start of string */
if ((t = malloc(strlen(snew) + 1)) == NULL)
return -1;
strcpy(t, snew);
numtokens = 0;
if (strtok(t, delimiters) != NULL) /* count the number of tokens in s */
for (numtokens = 1; strtok(NULL, delimiters) != NULL; numtokens++) ;
/* create argument array for ptrs to the tokens */
if ((*argvp = malloc((numtokens + 1)*sizeof(char *))) == NULL) {
error = errno;
free(t);
errno = error;
return -1;
}
/* insert pointers to tokens into the argument array */
if (numtokens == 0)
free(t);
else {
strcpy(t, snew);
**argvp = strtok(t, delimiters);
for (i = 1; i < numtokens; i++)
*((*argvp) + i) = strtok(NULL, delimiters);
}
*((*argvp) + numtokens) = NULL; /* put in final NULL pointer */
return numtokens;
}
这个程序的意思是把int main(int argc, char *argv[])
中的*argv[]参数分开,然后输出,但是makeargv函数中的用strtok分开,
但是这个函数在的argv[1]的首地址中有“”的情况下就不分开了,谁能帮忙解决1下
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(6)
这个例子是我看得unix 高级编程上面的例子,他的意思就是分开命令行中的参数,但是
我运行他的例子不行始终不全部输出参数,所以我来问下~
希望高手能修改那个函数1下
你说的运行很好是什么意思?
是你在编译完后运行程序,后面紧跟着参数比如123 qwe asd
然后程序就输出这几个参数吗?
不知道楼主要做什么,原来char *argv[]本来就分开了各个参数,直接输出就可以了
况且用strtok来分割字符串, 本来就是字符串结束就不再切割了,"" 等同于'',为字符串结束符
如果你要实现,就需要用''进行强制转换吧!
比如argv[1]="\0tatb",这样就可以了
>>
>>
>>可能是他想自己写一个
>>
>>
用getopt()和getopt_long()不是更好么?
>>
>>
>>"函数在的argv[1]的首地址中有“”的情况"是什么意思?
>>我这里运行很好阿
>>
>>