gpt4 book ai didi

c - 如何从 "conversion to ‘char’ 中删除警告 ‘int’ 可能会改变它的值”

转载 作者:太空宇宙 更新时间:2023-11-04 00:36:06 27 4
gpt4 key购买 nike

我虽然如果我转换一个像这样的数字(unsigned char)32 就足以修复编译器警告,但它不像我那样计划。

这里我有程序的以下部分,它实际上解释了问题:

#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;
}
}

当我尝试在编译器警告打开的情况下编译它时,我得到了这个:

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

这意味着下面的 ptr[i] += (unsigned char)32; 没有为我的问题提供解决方案。

我的问题是,如何删除此警告,因为我对此一无所知。

Ideone没有多大帮助,因为我认为所有警告都已关闭。

最佳答案

OP 使用的警告级别非常挑剔

warning: conversion to 'char' from 'int' may alter its value [-Wconversion]

  // Both cause the warning
ptr[i] += (unsigned char) 32;
ptr[i] = tolower(ptr[i]);

要解决警告,要明确

  ptr[i] = (char) (ptr[i] + 32);
ptr[i] = (char) tolower(ptr[i]);

[详细] 涉及窄类型的操作,如 char、short、unsigned char、_Bool、... 将提升该操作数,使用通常的 整数提升int/unsigned,如ptr[i]。因此,将 int/unsigned 分配回 char 会触发警告。结果的显式转换消除了警告。

许多编译省略了 [-Wconversion] 或等效的 选项,因此不会看到警告。

关于c - 如何从 "conversion to ‘char’ 中删除警告 ‘int’ 可能会改变它的值”,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35439640/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com