Продолжайте получать ошибку сегментации (дамп ядра) при попытке печати массива - PullRequest
0 голосов
/ 30 апреля 2020

Не уверен, почему я получаю ошибку по этому поводу, может кто-нибудь, пожалуйста, помогите мне. Кроме того, я знаю, что размеры разные и не правильные, меня это сейчас не волнует. Я просто пытаюсь что-то проверить.

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

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


        char csvDest[100] = "1000,cap_net_raw,cap_sys_admin";
        char *tokptr = strtok(csvDest,",");
        char *csvArray[100];

        int i = 0;
        while(tokptr != NULL){
              csvArray[i++] = tokptr;
              tokptr = strtok(NULL, ",");
        }

        int j;
        for(j=0; j < i; j++){
            printf("%s\n", csvArray[j]);
        }

        return 0;
}

Ответы [ 2 ]

3 голосов
/ 30 апреля 2020

Вы пропустили вызов strtok.

Замените

              tokptr = (NULL, ",");

на

              tokptr = strtok(NULL, ",");

Вы не можете напечатать 100 строк, если они были назначены. Вам следует заменить

        for(i=0; i < 100; i++){
            printf("%s\n", csvArray[i]);
        }

на

        for(int j=0; j < i; j++){
            printf("%s\n", csvArray[j]);
        }
2 голосов
/ 30 апреля 2020

Ваш for l oop не устанавливает i в начало массива. Т.е. установите i в 0, прежде чем получить доступ к csvArray в printf. Таким образом, разыменование массива обращается к указателю, который еще не был установлен.

...