Что не так с данным кодом - PullRequest
2 голосов
/ 19 января 2012

Я только изучаю некоторые указатели в C, и я случайно узнал, что используя * можно разыменовать указатель. Поэтому я написал следующий код, чтобы проверить это.

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

char *findChar(char *s, char c){
  while(*s!=c){
     s++;
  }
  return s;
}

int main(){
  char myChar='a';
  const char myString[]="Hello abhishek";
  char *location;
  location = findChar(myString,myChar);
  puts(location);
  char temp = *location;
  printf(temp);
}

Я предполагаю, что temp должен получить значение, указанное положением указателя символа, но эта программа вызывает ошибку сегментации. Уточните пожалуйста, что я делаю не так?

Ответы [ 3 ]

7 голосов
/ 19 января 2012

Неверно следующее:

 char temp = *location;
 printf(temp);

Если вы хотите распечатать символ, используйте следующее:

 char temp = *location;
 printf("%c\n", temp);

Первый аргумент printf() должен быть форматомстрока.

0 голосов
/ 19 января 2012

printf вызывает ошибку сегментации, так как printf ожидает указатель char для temp и вы передаете ему один символ.

0 голосов
/ 19 января 2012

Первый аргумент printf должен быть char* (для формата), а не char.

Попробуйте printf("%c\n",temp);

Кстати, чтобы увидеть индекс myChar в массиве, вы можете напечатать location-myString

...