【问题标题】:incompatible integer to pointer conversion assigning to 'char *' from 'int' when converting char* to char* lowercase将 char* 转换为 char* 小写时,从 'int' 分配给 'char *' 的不兼容整数到指针转换
【发布时间】:2021-12-16 14:11:35
【问题描述】:

当我去编译我的代码时,我收到了这个烦人的警告。我正在尝试使用char * 并将其转换为小写,然后再通过测试运行它。我的代码编译得很好,但我想学习如何摆脱这个警告。具有相同错误的其他帖子没有提供我需要更改以消除此错误的内容。

//convert to lower case
char *c = "WORD TO LOWER";
char *s[testWordLen];
for (int i = 0; i < testWordLen; i++)
{
    s[i] =  tolower((unsigned char) c[i]);
}

解释我做错了什么也很好。

【问题讨论】:

  • char *s[testWordLen]; -> char s[testWordLen]; 第一个是指针数组,第二个是字符数组。
  • 不,抱歉,您的代码不是“编译得很好”——“烦人的警告”是一个严重的问题!在 C 语言中有两种处理字符串的方法:使用 char 的数组,或使用指向 char 的指针。但是你有一个指向char 的指针数组,这两者都不是!
  • 感谢@RetiredNinja。我会改变它,看看它是如何运行的。
  • (免责声明:我没有投反对票。)我认为“投反对票”是一种误导,但是,它会降低您的声誉。如果您将鼠标悬停在向下的三角形上,您会看到“这个问题没有显示任何研究工作;......”这是一个不赞成投票的合理理由。即使对于新手来说,也应该表明他们已经阅读并试图理解(在这种情况下)警告或错误消息。您可以通过解释您认为警告的内容以及您认为没有问题的原因来做到这一点。
  • "Compiles fine" 和 "annoying warning" 也是不理解问题的迹象。如果编译器是一个人,他会为可能的错误代码感到恼火,反复呈现它,但幸运的是它还好心地举手,没有感到疲倦。 ;-) 将编译器视为您的朋友,竭诚为您提供帮助。

标签: c string char


【解决方案1】:

您正在使用char *s[testWordLen]; 创建一个二维数组;也就是说,指向字符数组的指针。当您像这样取消引用它时:s[i] = tolower((unsigned char) c[i]);,您将单个字符分配给数组。

解决方法是:将变量声明为char s[testWordLen];

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-12-19
    • 2017-02-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多