首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >警告:赋值在没有强制转换的情况下从指针生成整数

警告:赋值在没有强制转换的情况下从指针生成整数
EN

Stack Overflow用户
提问于 2011-02-26 04:25:13
回答 3查看 246.5K关注 0票数 37

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

代码语言:javascript
运行
复制
/* initial declaration */
char *src = "abcdefghijklmnop";
.....

/* I get the   "warning: assignment makes integer from pointer without a cast" */
*src ="anotherstring";

我试着重铸指针,但没有成功。

EN

回答 3

Stack Overflow用户

发布于 2011-02-26 05:10:01

当您编写语句时

代码语言:javascript
运行
复制
*src = "anotherstring";

编译器将常量字符串"abcdefghijklmnop"视为数组。假设您编写了以下代码:

代码语言:javascript
运行
复制
char otherstring[14] = "anotherstring";
...
*src = otherstring;

现在,事情变得更清楚了。左边的*src指的是指针(因为src的类型是char - to -char),而右边的otherstring指的是指针。

这并不是严格禁止的,因为您可能希望存储指针所指向的地址。但是,在这种情况下通常会使用显式强制转换(这种情况并不常见)。编译器抛出了一个危险信号,因为您的代码可能不会像您认为的那样工作。

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

票数 36
EN

Stack Overflow用户

发布于 2011-02-26 04:27:10

表达式*src指的是字符串中的第一个字符,而不是整个字符串。要将src重新指定为指向不同的字符串tgt,请使用src = tgt;

票数 34
EN

Stack Overflow用户

发布于 2011-02-26 05:42:47

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

代码语言:javascript
运行
复制
src = "anotherstring";

因为src的类型是char *

票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5122231

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档