c4133 предупреждение c кодом

У меня проблема с предупреждением c4133, говорят, что проблема в несовместимых типах от char* до int*, я пытаюсь привести указатель ((char*)x), но без удачи, может быть, кто-то знает, в чем проблема /

это моя программа, проблема в функции.

void replaceSubstring(char *str, char *substr)//function that gets string and substring and      make the substring in string big letters
{
    int i;
    int  *x;

    x = (strstr(str, substr));//The problem line 
    while (strstr(str,substr) != NULL)
    {
        for (i=0;i<strlen(substr);i++)
        {
            *x = *x - 32;
            x++;//move to the next char
        }
        x = (strstr(str, substr));  //first apear of substr int str
    }
 }

2 ответа

Решение

Прототип strstr является

 char *strstr(const char *haystack, const char *needle);

Возвращаемое значение - символьный указатель. Так что сделайте х как символьный указатель.

В вашем коде, x определяется как int * но тип возврата strstr() является char *.. Проверьте справочную страницу здесь.

Стоит упомянуть, castобычно считается плохой практикой в c, С правильно написанным кодом, в большинстве случаев, castможно избежать. В большинстве случаев castМожет привести к появлению множества ошибок. Дважды проверьте типы данных и держитесь подальше от castING.

Sidenote: Просто предложение, может быть, прежде чем непосредственно вычесть 32 от *x, может быть, вы хотите выполнить проверку диапазона *x быть в пределах 97-122 чтобы убедиться, что это строчная буква.

Кроме того, лучше выполнять strlen(substr) вне цикла, сохраните в переменную и используйте это значение в цикле. Избавит вас от лишних звонков strlen(),

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