Wie die Warnung "Konvertierung von" int "in" char "gelöscht wird, kann den Wert ändern"

Ich obwohl das, wenn ichcast eine Zahl wie diese(unsigned char)32 Es wird ausreichen, um die Compiler-Warnung zu beheben, aber es war nicht so, wie ich es geplant habe.

Hier habe ich den folgenden Teil des Programms, der das Problem tatsächlich erklärt:

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

int main(void){
    char *ptr = malloc(6);
    const char *name = "MICHI";
    unsigned int i = 0;

    if(ptr){
        strcpy(ptr, name);
        ptr[strlen(ptr)] = '\0';
    }else{
        return 1;
    }

    while(ptr[i] != '\0'){
        if((ptr[i] >= 'A') && (ptr[i] <= 'Z')){
            ptr[i] += (unsigned char)32;
        }
        i++;
    }

    printf("Name = %s\n",ptr);
    if(ptr){
        free(ptr);
        ptr = NULL;
    }
}

Wenn ich versuche, es mit eingeschalteten Compiler-Warnungen zu kompilieren, erhalte ich Folgendes:

error: conversion to ‘char’ from ‘int’ may alter its value [-Werror=conversion]|

Dies bedeutet, dass die folgendenptr[i] += (unsigned char)32; bietet keine Lösung für mein Problem.

Meine Frage ist, wie man diese Warnung fallen lässt, weil ich keine Ahnung habe.

Ideone hilft nicht viel, weil ich denke, dass alle Warnungen ausgeschaltet sind.

Antworten auf die Frage(8)

Ihre Antwort auf die Frage