【发布时间】:2013-02-23 15:25:36
【问题描述】:
我正在尝试将给定的 char 数组拆分为单独的字符串。我这样做是通过将每个单词的地址放入一个数组中,然后从地址中获取字符串进行打印。
所以我更新了我的代码,但现在程序在打印 numArgs 之后但在“test2”之前冻结。我不明白为什么。
----------------old code-----------------------
char* parseArgs(char* comPtr){
char *args[100] = {0};
char *token;
int i = 0;
token = strtok(comPtr, " ");
while(token != NULL){
args[i] = malloc(100);
args[i] = &token;
token = strtok(NULL, " ");
}
return *args;
}
char* args = parseArgs(comPtr);
int i = 0;
while(i < numArgs){
printf("arg%d: %s\n",i,&args[i]);
i++;
}
-----------------------end old code--------------------
------------------new code------------------------
int countArgs(char* comPtr){
char *token;
int i = 0;
token = strtok(comPtr, " ");
while(token != NULL){
i++;
token = strtok(NULL, " ");
}
return i;
}
char** parseArgs(char* comPtr){
printf("test1");
char** args = calloc(100, sizeof(char*));
char* token;
int i = 0;
while(token = strtok(comPtr, " ")){
args[i] = token;
}
printf("test2");
return args;
}
printf("ComPtr: %s\n",comPtr);
char* path = "/bin/";
//int pid = fork(); //pid always 0 so using pid = 1 to test
//printf("PID:%d",pid);
int pid = 1;
printf("PID:%d",pid);
if(pid != 0){
int numArgs = countArgs(comPtr);
printf("test1");
printf("NumArgs: %d\n",numArgs);
printf("test2");
char** args = parseArgs(comPtr);
int i = 0;
printf("test3");
while(i < numArgs){
printf("arg%d: %s\n",i,args[i]);
printf("test4");
i++;
}
}
else{
//waitpid();
}
【问题讨论】:
-
你还没有问过问题。
-
Umm:
args[i] = malloc(100); args[i] = &token;你刚刚泄露了两行短线内存。 -
你不应该从函数
parseArgs返回局部变量args -
仅供参考
strtok将修改其第一个参数。您的字符串中的空格在countArgs中被替换为\0,然后您尝试解析parseArgs中的空格(不再存在)。此外,i永远不会在parseArgs中递增。 -
您的代码无法编译。如果我们无法编译代码,我们应该如何重现错误?请向我们展示一个最小的、可编译的测试用例。
标签: c arrays string pointers char