Нулевой завершающий указатель на символ - PullRequest
1 голос
/ 03 августа 2011

Я совершенно новичок в C. Я пытаюсь сделать простую функцию C, которая будет разбивать строку (массив символов).

Следующий код не работает должным образом, потому что я не знаю, как завершить массив символов в массиве. Есть указатели на символы, передаваемые в функции. Один, содержащий исходный константный массив char, который нужно разделить, и другой указатель - это многомерный массив, который будет хранить каждую разделенную часть в отдельном массиве char.

Выполнение функции, с которой я столкнулся, очевидно, вызвало много шума, в основном из-за недостатка опыта в Си.

Я думаю, что в этой функции я не могу завершить отдельный массив с \ 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 ]

1 голос
/ 03 августа 2011

Вот рабочая программа для вас. Дайте мне знать, если вам нужно какое-либо объяснение.

#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;
}
1 голос
/ 03 августа 2011

Если я правильно понимаю ваши намерения, вы пытаетесь взять строку типа 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
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...