C Строка верна в одной функции и сбрасывает мусор в другой - PullRequest
3 голосов
/ 10 мая 2011

Это мой код

#include <stdio.h>

void abc(char *text);

int main(void)
{
    char text[20];
    abc(text);
    printf("text in main : %s\n",text);
    return 0;
}

void abc(char *text)
{
    text = "abc";
    printf("text in abc function : %s\n",text);
}

И это вывод.

text in abc function : abc
text in main : ฬฬฬฬฬฬฬฬฬฬฬฬฬฬฬฬฬฬฬฬฬฬฬฬ๑ป ๚

Мои вопросы:

  1. Почему текстовая переменная вОсновная функция и в abc функция не то же самое?
  2. Я пытаюсь изменить, чтобы использовать scanf в функции abc, и это работает!там же.Почему?
  3. Как изменить код, чтобы он работал.Я имею в виду из вопроса 1, что основной функции и в функции ABC одинаковы?

Ответы [ 2 ]

13 голосов
/ 10 мая 2011

При вызове функции:

 abc(text);

создается копия указателя text, и этот указатель используется в функции abc().Так что, когда вы говорите:

text = "abc";

, вы меняете копию, а не копию обратно в main.

Кроме того, вы вообще не можете назначать строки в C - вместо этого вы должны использовать библиотечные функции, такие как strcpy().Чтобы ваш код работал, вам нужно изменить:

 text = "abc";

на:

 strcpy( text, "abc" );
0 голосов
/ 10 мая 2011

Вы не можете просто printf("text in main : %s\n",text);, это не имеет никакого значения в C, вы также можете использовать функцию типа strcpy(), которая берет каждый символ и организует их как String !или обычный цикл for, который запускается по всему массиву и печатает органы без пробелов.

int i;
for (i=0 ; i<strlength(text);i++)
{
    printf ("%d",text[i]);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...