c - 将 C 字符数组拆分为单词

标签 c arrays string pointers 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();
}

最佳答案

你已经忘记了你的内存在哪里,你的指针指向等等。如果你想返回 token 的指针列表,你需要这样的东西:

char** parseArgs(char* comPtr){
    char** p_args = calloc(100, sizeof(char*);
    int i = 0;
    char* token;
    while (token = strtok(comPtr, " "))
        p_args[i] = token;
    return p_args;
}

char** p_args = parseArgs(comPtr);
int i = 0;
while(i < numArgs)
{
    printf("arg%d: %s\n",i,p_args[i]);
    i++;
}
free(p_args);

我还没有测试过它,但它应该为您指明正确的方向。仔细考虑它与您的程序有何不同,并在代码中使用调试器和/或 printf() 语句来打印地址并查看其工作原理(或在必要时进行调试)。

关于c - 将 C 字符数组拆分为单词,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15287986/

相关文章:

c - 从字符串中提取文件路径

c - 根据日期和时间元素对结构进行排序

arrays - Scala中2D数组的深拷贝?

c++ - 在我的 Naughts and Crosses 游戏中没有人赢

java - 在 Java 中将字节字符串转换为字母数字字符数组?

java - 如何在 Java 中将字符串的二进制表示形式转换为字节?

c - FprintF 从链接列表到文件

c++ - 通过指针从c++中的函数返回数组,但是程序如何知道数组大小?

string - 如何在 Haskell 中连接两个(IO)字符串?

c - 为什么 K&R `NUMBER` 中的 "Reverse Polish Calculator"在 gdb 中显示为无效?