#c
#c
Вопрос:
Я использую scanf
для чтения строки и помещения ее в char*
.
scanf("%s", amp;str);
printf("%c",str);
Это работает нормально, но я не знаю, как получить доступ к определенному символу в этой строке, как я бы сделал с char[] . Я пытался увеличить адрес:
str = 1;
Я немного повозился, но все, что я получаю, это первый символ, ошибки segfaults или ошибки шины. Возможно ли работать с этой строкой без копирования в char[]
?
Комментарии:
1. Как вы распределяете память? Я предполагаю, что вы пытаетесь выполнить запись в неинициализированный указатель.
2. Я просто делаю это: char * str; scanf («%s», amp;str); str = 2; printf(«%c»,(str)); Если я введу ‘TEST’, я получу ‘V’ в стандартном выводе.
3. Вам нужно указать эту информацию в вашем вопросе.
Ответ №1:
1)
It works fine but I don't know how to access a specific character in that string as I would with a char[]
Просто разыменуйте массив указателей с помощью [] и получите доступ к символу в позиции «i»
str[i]
2)
I have been messing around a bit but all I get is the first character or segfaults or bus errors
Да — само arrayname является указателем на первый символ строки
Ответ №2:
Если str объявлен как char *
, то этот оператор
scanf("%s", amp;str);
неверен. Должен быть
scanf("%s", str);
И следующий оператор
printf("%c",str);
также неверен. Должен быть
printf("%c", *str);
Если вы хотите вывести какой-либо другой символ в массиве символов, используя указатель char *
, тогда вы можете написать либо
printf( "%c", *( str n ) );
или
printf( "%c", str[n] );
или даже как
printf( "%c", n[str] );
где n некоторое целое значение, меньшее, чем strlen( str )
Примите во внимание, что str должен указывать на некоторую выделенную память. В противном случае программа будет иметь неопределенное поведение.
Комментарии:
1. @user161794 Это работает с amp;str, потому что значение str и amp;str одно и то же, хотя типы выражений разные.
2. char *str; scanf(«%sn», str); int i; for(i = 0; i < strlen(str); i ) printf(«%c», str[i]); … то же самое с *(str i)
3. Какого черта вы поощряете пользователей использовать
scanf("%s", ...)
??4. @user161794 Да, это то же самое.