警告:赋值从指针生成整数而没有强制转换

lcu*_*ler 26 c casting

当我声明一个char *固定的字符串并重用指针指向另一个字符串

/* initial declaration */
char *src = "abcdefghijklmnop";
.....

/* I get the   "warning: assignment makes integer from pointer without a cast" */
*src ="anotherstring";
Run Code Online (Sandbox Code Playgroud)

我试图重铸指针但没有成功.

Jer*_*ock 33

表达式*src引用字符串中的第一个字符,而不是整个字符串.要重新分配src以指向其他字符串tgt,请使用src = tgt;.


bta*_*bta 30

当你写下这个陈述时

*src = "anotherstring";
Run Code Online (Sandbox Code Playgroud)

编译器将常量字符串视为"abcdefghijklmnop"数组.想象一下,您已经编写了以下代码:

char otherstring[14] = "anotherstring";
...
*src = otherstring;
Run Code Online (Sandbox Code Playgroud)

现在,它正在发生的事情更加清晰.左侧*src是指char(因为src是指向类型的指针char),而右侧otherstring指的是指针.

这不是严格禁止的,因为您可能希望存储指针指向的地址.但是,在这种情况下通常使用显式强制转换(这种情况并不常见).编译器会抛出一个红色标记,因为你的代码很可能没有按照你的想法行事.

在我看来,你正在尝试分配一个字符串.C中的字符串不是像C++中那样的数据类型,而是使用char数组实现.您无法直接将值分配给字符串,就像您尝试的那样.相反,你需要使用像strncpy和朋友一样的函数,<string.h>并使用char数组而不是char指针.如果您只希望指针指向不同的静态字符串,则删除*.


Joh*_*ode 5

警告来自您src在作业中取消引用的事实.表达式*src有类型char,它是一个整数类型.表达式"anotherstring"具有type char [14],在此特定上下文中隐式转换为type char *,其值是数组中第一个字符的地址.因此,您最终尝试将指针值分配给整数类型,因此警告.删除该**src,并预期它应该工作:

src = "anotherstring";
Run Code Online (Sandbox Code Playgroud)

自的类型srcIS char *.