【问题标题】:Issues with char and string assignments on C (integer from pointer without a cast?)C 上的字符和字符串分配问题(来自没有强制转换的指针的整数?)
【发布时间】:2021-10-06 02:50:26
【问题描述】:

我在我的代码上做了以下声明:

char bussola, com[1], pen;
int main()
{
   bussola = "oeste", pen = "up";

但由于某种原因,我在编译器上遇到了这个错误:

 main.c:18:10: warning: assignment makes integer from pointer without a cast [-Wint-conversion]
 
 bussola = "oeste", pen = "up";
           ^             ^

因此,我不断收到类似这样的其他错误:

main.c:51:17: warning: comparison between pointer and integer
 
 if (bussola == "oeste") 
              ^~

我该怎么办?

【问题讨论】:

  • bussolachar"oeste" 是一个字符串文字。你想要 bussola 作为单个 char 还是 char *bussola 所以它是指向 chars 的指针?
  • 我讨厌说“RTFM”,但这些人是对的。通过学习 C,你无法轻易猜出自己的路;这太深奥了。网上有很多关于C语言字符串操作的教程。

标签: c string variables char declaration


【解决方案1】:
char bussola[6], pen[3];

int main() {
   strcpy(bussola, "oeste");
   strcpy(pen, "up");
}
if(!strcmp(bussola,"oeste")

以上是您尝试执行的正确语法。

考虑到这段代码,我建议彻底了解 C 中的字符串和字符概念以及 string.h 头文件函数。

【讨论】:

    【解决方案2】:

    您正在将 char 数组(AKA 字符串)分配给 char 变量,它们不是兼容的数据类型。 char 变量只能有单个 char 值(如 'a' 、 'F' 、 '2' 或 ' ')。使用单引号 (' ') 像 char 变量一样解释字符很重要。 您可以使用 char * bussola 或 char bussola[LENGTH] 来声明字符串,但您必须在声明中初始化数组:

    char bussola[6] = "oeste";
    

    如果以后想初始化,可以使用strcpy:

    char bussola[6];
    strncpy(bussola, "oeste", 6);
    

    请注意字符串使用双引号 (" ") 而不是单引号,如字符。

    【讨论】:

      猜你喜欢
      • 2019-02-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多