Почему я получаю ошибку сегментации при вызове функции с переменной в качестве указателя на массив символов? - PullRequest
0 голосов
/ 24 марта 2020

Я новичок в использовании указателей на символьный массив. Если я запускаю код с основной функцией 1, он работает правильно и печатает слово «привет» безо всякой ошибки. Но при использовании второй основной функции я получаю ошибку как ошибку сегментации.

Я пытаюсь это выяснить, но не понимаю, в чем здесь проблема. На самом деле моя цель - использовать 2-ю основную функцию с указателем на массив символов (потому что у меня есть данные только в этой форме). Как выполнить код, используя 2-ю основную функцию, чтобы получить тот же результат, что и у основной функции 1?

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

void enmToStng(char varState[])
{
    strcpy(varState,"hello");
}
//main function 1
int main(void)
{
    char varState[]= {"1"};
    enmToStng(varState);
    printf("varState = %s\n", varState);
    return 0;   
}
//main function 2
/*int main(void)
{
    char *varState[]= {"1","2","3"};
    enmToStng(varState[1]);
    printf("varState[1] = %s\n", varState[1]);
    return 0;   
}*/     

1 Ответ

0 голосов
/ 24 марта 2020

вы объявляете строку, в которой есть место только для двух элементов (1 and \0), но затем вы копируете в нее hello 7 символов, вы не можете этого сделать, потому что у вас недостаточно места.

вы можете использовать что-то вроде этого

void enmToStng(char varState[])
{
    varState = malloc(7);
    strcpy(varState, "hello");
}

PS: поскольку вы не отправляете varState по ссылке, в main вы напечатаете 1, а не hello.

...