2015-04-14 2 views
0

Я пытаюсь использовать функцию со строкой в ​​качестве параметра. Я запускаю несколько сообщений об ошибках. Во-первых, он говорит, что строка [i] не является массивом, указателем или вектором, несмотря на то, что строка является символьным массивом. Во-вторых, он говорит, что я делаю указатель на целочисленное преобразование. Вот мой код:Использование string как параметра для функции

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

void example (char string) { 
    int i; 
    for (i = 0; i < strlen(string); i++) { 
     printf (string[i]); 
    } 
} 

int main (void) { 
    example("I like pie"); 
    return 0; 
} 
+0

Учебное пособие по строкам в C: http://www.tutorialspoint.com/cprogramming/c_strings.htm. –

+0

Эта строка: void example (char string) {'говорит, что передается один символ. возможно, вы имели в виду: 'void example (char * string) {' <- заметить, что параметр теперь является указателем на char, а не на один символ. Указанный символ может легко быть добавлением первого символа в «строке» символов. – user3629249

+0

Эта строка: 'printf (string [i]);' не имеет допустимой строки формата в качестве первого параметра. поэтому либо напишите: printf («% c», строка [i]). или напишите: putc (string [i]; – user3629249

ответ

4

void example(char string) должен быть void example(char *string). Вы объявили его, чтобы взять персонажа, вы хотите, чтобы он взял указатель или массив символов.

Кроме того, вам необходимо сообщить printf, вы указываете символ: printf("%c", string[i]);.

4

Ваш API не так должно быть

void example (char *string) { // string is a pointer 
    int i; 
    size_t n = strlen(string); 
    for (i = 0; i < n; i++) { 
     printf ("%c",string[i]); // print character using %c 
    } 
} 

Вычислить длину строки до цикла, вызывая STRLEN() в каждой итерации не является хорошей идеей.

PS: что string указывает на только для чтения вы не можете изменить его

0

Вы должны использовать void example(char *string) вместо void example (char string).

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

void example (char *string) { 
    int i; 

    for (i = 0; i < strlen(string); i++) { 
    printf ("%c",string[i]); 
    } 
    printf("\n"); 
} 

int main (void) { 
    example("I like pie"); 

    return 0; 
} 
0

Ваша функция пример только получает характер. Чтобы получить строку, вы можете использовать указатель. Кроме того, вы можете использовать "% S" спецификатор формата в Printf вместо использования для петли и STRLEN() функцию.

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

void example (char *string) { 
    int i; 
    printf ("%s\n",string); 

}