空终止字符指针

时间:2011-08-03 01:41:11

标签: c

我是C的新手。 我试图做一个简单的C函数,它将拆分字符串(char数组)。

以下代码无法正常工作,因为我不知道如何终止数组中的char数组。在函数中传递了char指针。一个包含要拆分的原始常量char数组,另一个指针是多维数组,它将每个拆分部分存储在单独的char数组中。

我遇到的功能显然有很多喧嚣,主要是因为我缺乏C经验。

我认为在这个函数中我无法实现的是使用'\ 0'终止单个数组。 这是代码:

void splitNameCode(char *code, char *output);

void splitNameCode(char *code, char *output){

    int     OS = 0; //output string number
    int     loop;
    size_t  s = 1;

    for (loop = 0; code[loop]; loop++){
        if (code[loop] == ':'){ 
            output[OS] = '\0'; // I want to terminate each array in the array
            OS ++;
        }else {
            if (!output[OS]) {
                strncpy(&output[OS], &code[loop], s);
            }else {
                strncat(&output[OS], &code[loop], s);
            }
        }
    }
}

int main (int argc, const char * argv[]) {

    char output[3][15];
    char str[] = "andy:james:john:amy";
    splitNameCode(str, *output);

    for (int loop = 0; loop<4; loop++) {
        printf("%s\n", output[loop]);
    }

    return 0;
}

2 个答案:

答案 0 :(得分:1)

如果我理解您的意图正确,您就会尝试使用andy:james:john:amy这样的字符串并到达andy\0james\0john\0amy。如果是这种情况,那么您的代码可以大大简化:

void splitNameCode(char *code, char *output){
    int loop;
    strncpy(code, output, strlen(code));
    for (loop = 0; output[loop]; loop++){
        if (output[loop] == ':'){ 
            output[loop] = '\0'; // I want to terminate each array in the array
        }
    }
}

答案 1 :(得分:1)

这是一个适合您的工作计划。如果您需要任何解释,请告诉我。

#include <stdlib.h>
#include <string.h>
#include <stdio.h>

void splitNameCode(char *code, char **output) {
    int i = 0;
    char* token = strtok(code, ":");
    while (token != NULL) {
        output[i++] = token;
        token = strtok(NULL, ":");
    }
}

int main (int argc, const char *argv[]) {
    char* output[4];
    char input[] = "andy:james:john:amy";
    splitNameCode(input, output);
    for (int i = 0; i < 4; i++) {
        printf("%s\n", output[i]);
    }
    return 0;
}