如何解决警告:指向整数转换的指针不兼容
我正在尝试更改单词中的最后一个字符,以使其成为单词的复数形式。例如,公共汽车到公共汽车或一便士到几美分。当我尝试将最后一个字符设置为等于复数结尾时,出现警告。请让我知道我需要更改什么才能解决此问题。谢谢。
#include <stdio.h>
#include <string.h>
int main(void) {
char word[50];
char *last_char;
printf("Enter a word: ");
scanf("%[^\t\n]",word);
last_char = &word[(strlen(word)-1)];
if(*last_char == 'y')
{
*last_char = "ies";
printf("\nthis does not work %s",word);
}
else if(*last_char == 's')
{
*last_char = "es";
printf("\nthis is working %s",word);
}
else if(*last_char == 'h')
{
*last_char = 'es';
printf("\nPlural: %s",word);
}
else
{
last_char = &word[(strlen(word))];
*last_char = 's';
printf("\nPlural: %s",word);
}
return 0;
}
解决方法
只要看看你自己说的话:
当我尝试将最后一个字符设置为等于复数结尾时,会收到警告。
您在该位置有一个用于存储字符的内存插槽,而您试图在该插槽中压缩多个字符。是行不通的。
"ies";
不是单个字符,而是一个字符串-衰减到指向第一个字符的指针的字符数组。单个char
是整数类型;您不能将指针转换为字符(可以,但是没有意义)。
在这种情况下,简单的解决方案是 strcpy
从last_character
开始的子数组的结尾,即:
strcpy(last_char,"ies");
至于
last_char = &word[(strlen(word))];
*last_char = 's';
这是不正确的,因为该字符串不会以空值结尾!
记住last_char
已经指向最后一个字符,其后的空终止符位于地址last_char + 1
上;您可以将这些两条行替换为
strcpy(last_char + 1,"s");
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。