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
Может привести к появлению множества ошибок. Дважды проверьте типы данных и держитесь подальше от cast
ING.
Sidenote: Просто предложение, может быть, прежде чем непосредственно вычесть 32
от *x
, может быть, вы хотите выполнить проверку диапазона *x
быть в пределах 97-122
чтобы убедиться, что это строчная буква.
Кроме того, лучше выполнять strlen(substr)
вне цикла, сохраните в переменную и используйте это значение в цикле. Избавит вас от лишних звонков strlen()
,