Беда с указателями в C - PullRequest
       8

Беда с указателями в C

0 голосов
/ 05 декабря 2018

У меня есть указатель на массив символов foo

char *foo = "abbdefg";

и панель массива обычных символов.

char bar[10];

bar содержит массив символов, уникальных для bar.Например, я хочу, чтобы bar [0] равнялся «a», bar [1] = «b», bar [2] = «d» и т. Д. Однако, когда я устанавливаю bar [0] в foo [0], bar [0] = "abbdefg" и bar [1] = "bbdefg" и т. Д.

Я знаю, как напечатать то, что я хочу, с помощью printf

printf("%c", foo[0]);

и a и

printf("%c", foo[1]);

дает b, но я не знаю, как сделать эквивалент, просто установив в строке [0] значение "a" вместо "abbdefg".

Любой совет действительно поможет, спасибо.

1 Ответ

0 голосов
/ 05 декабря 2018

Думаю, вы путаете символы и строки.

bar содержит массив символов, уникальных в bar.Например, я хочу, чтобы bar [0] равнялся «a», bar [1] = «b», bar [2] = «d» и т. Д. Однако, когда я устанавливаю bar [0] в foo [0], bar [0] = "abbdefg" и bar [1] = "bbdefg" и т. Д.

Я знаю, как напечатать то, что я хочу, с помощью printf

bar [0] не может быть равным"a" потому что bar [0] является символом, а «a» является строкой (в данном случае это массив из двух символов).bar [0] может равняться 'a', что является просто буквой a.и bar [1] может равняться 'b', а bar [2] может равняться 'd' и т. д.

Когда вы устанавливаете bar [0] в foo [0], используя, например, bar[0] = foo[0];,bar [0] теперь содержит «a».bar [1] по-прежнему содержит то, что было раньше.

bar [0], безусловно, не может содержать «abbdefg», потому что он соответствует только одному символу.Скорее всего, вы случайно распечатываете все символы в строке вместо строки [0], используя% s вместо% c.

...