Указатели, Строки и функции в C

Я пропустил неделю занятий, в которых они освещали указатели, но я не смог получить заметки из класса, но мой HW должен, и я до сих пор не понимаю, как использовать указатели для передачи строк из функции в функцию.... ниже мой код, в котором я понимаю, что указатели запутаны, но я пытался читать другие форумы, но просто заблудился. Любая помощь приветствуется.

#include <stdio.h>

char* returnInPlace(char);
int palindrom(char, char );

main(void)
{
  char newString[20];

  printf("Enter a string: ");
  scanf("%s",&newString);

  char flippedString[20]=reverseInPlace(newString);
  int palCheck= palindrome(newString, flippedString);

  if (palCheck==0)
    printf("\n\tThe reverse string is %s, so we don't have a palindrome.", flippedString);
  else
    printf("\n\tThe reverse string is %s, so we do have a palindrome.", flippedString);

}

char* reverseInPlace(char newString)
{
  int iterator;
  char flipped[20];
  char *ptr1;
  for(iterator=0;iterator<20;iterator++)
  {
    flipped[iterator]=firstString[19-iterator];
  }
  ptr1=flipped[];
  return *ptr1;
}

int palindrome(char newString, char flippedString)
{
  int iterator;
  int palCheck=1;
  for(iterator=0;iterator<20;iterator++)
  {
     if (firstString[iterator]==secondString[iterator])
      continue;
     else
     {
       palCheck=0;
       break;      
     }  
  }
  return palCheck;
}

1 ответ

Проблема 1

В char* reverseInPlace(char newString) вы используете

return *ptr1;

что неправильно. То, что вы можете хотеть

return ptr1;

Проблема 2

ptr1=flipped[];

неправильно. Здесь вы назначаете базовый адрес локальной переменной flipped и возвращая это значение. flipped перестанет существовать после reverseInPlace() заканчивает исполнение Вам нужно использовать динамическое распределение памяти.


Проблема 3

char flippedString[20]=reverseInPlace(newString);

неправильно. Вы не можете назначить массив с = если только как инициализация во время определения.


Проблема 4

char* reverseInPlace(char newString)

это определение функции выглядит неправильно, если посмотреть, как она вызывается. Может быть, то, что вы хотите, это

char* reverseInPlace(char* newString)

вместо.

...... и, может быть, еще много. Настоятельно рекомендуем прочитать хорошую книгу об основах указателей и языка Си, прежде чем приступать к написанию кода.

Другие вопросы по тегам