предупреждение при передаче строки в функции c - PullRequest
0 голосов
/ 21 марта 2011

У меня есть функция, которая передает строку и манипулирует. в вызове функции я передаю строку как таковую myfunc ("hello");

В определении функции у меня есть

myfunc (char *array)
{
    xxxx
};

Программа работает нормально, но выдает предупреждение "цели указателя при передаче аргумента 1 'myfunc' отличаются по знаку".

Как исправить эту проблему?

Ответы [ 4 ]

2 голосов
/ 21 марта 2011

Строки на самом деле являются массивами констант символов. То есть тип "hello" равен const char[6].

Это значит, что вы не можете изменить его. Однако из-за глупого преобразования в C ++ массив (в строковом литеральном виде) может быть неявно преобразован в неконстантный указатель на первый элемент. Это вводит в заблуждение и опасно. (Действительно, неявное преобразование с удалением констант больше нигде не существует.)

Вы должны убедиться, что вместо этого у вас есть модифицируемый буфер:

char buffer[] = "hello";
myfunc(buffer);
0 голосов
/ 21 марта 2011

Я думаю, что Прасун прав.Ваш компилятор обрабатывает "строковые литералы" как unsigned char.Просто измените вашу функцию, чтобы принимать unsigned char ... или измените настройку компилятора, которая решает, подписан ли / не подписан "строковый литерал".

0 голосов
/ 21 марта 2011

что если вы объявите свою функцию как myfunc (const char *array)

0 голосов
/ 21 марта 2011

Убедитесь, что ваше определение для функции myfunc() имеет char* в качестве параметра.Я думаю, у него есть unsigned char * в качестве параметра.или где-то еще в вашем коде, вы передаете unsigned char* в качестве аргумента myfunc(char*).Посмотрите на строку предупреждения в вашем коде.

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