2015-03-20 3 views
0

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

#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

Какие проблемы вы столкнулись с помощью этого кода? BTW 'main (void)' должен быть 'int main (void)' –

+0

return * ptr; означает: возвращает значение на адрес, который содержит ptr. – moffeltje

+0

есть неопределенная 'firststring []' –

ответ

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) 

вместо этого.

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

+0

Заглавие последнего p в «проблеме 4», пожалуйста! :) –

+0

@EvdzhanMustafa Спасибо. :-) –

+0

для проблемы 3, это первый раз, когда я объявляю эту переменную, поэтому я ее назначил, мне не разрешено это делать? –

Смежные вопросы