Тип возвращаемого значения и указатели - PullRequest
0 голосов
/ 01 мая 2011

У меня возникли некоторые проблемы с типами и указателями на возвращаемые функции (извините, если это глупый вопрос, но я не запрограммировал C довольно давно). Когда я запускаю это:

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

char *parse(char const *data) {
    return data;
}

int main(int argc, const char *argv[]) {
    char *a = "# Test";
    char newString = parse(a);
    printf("%s\n", &newString);
    return 0;
}

Я получаю сообщение об ошибке:

writer.c: In function ‘parse’: writer.c:6: warning: return from incompatible pointer type 
writer.c:6: warning: function returns address of local variable writer.c: In function ‘main’: 
writer.c:11: warning: initialization makes integer from pointer without a cast

Есть идеи?

1 Ответ

2 голосов
/ 01 мая 2011

parse(a) возвращает char*, а newString имеет тип char, поэтому они несовместимы.

Измените это:

char newString = parse(a);
printf("%s\n", &newString);

на следующее:

char *newString = parse(a);
printf("%s\n", newString);

Относительно ваших ошибок / предупреждений:

writer.c: В функции 'parse': writer.c: 6: предупреждение: возврат из несовместимого типа указателя

Вы возвращаете const char*, в то время как тип возвращаемой функции - char*

writer.c: 6: предупреждение: функция возвращает адрес локальной переменной writer.c: в функции

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

'main': writer.c: 11: предупреждение: инициализация делаетцелое число от указателя без приведения

Вы присваиваете char* char.

И в качестве примечания: когда вы используете указатель на символ на строку констант,это const: const char *a = "# Test";

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...