Доступ к определенному символу в строке указателей символов в C

#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 Да, это то же самое.