当我声明一个指向固定字符串的char *
并重用指针指向另一个字符串时
/* initial declaration */
char *src = "abcdefghijklmnop";
.....
/* I get the "warning: assignment makes integer from pointer without a cast" */
*src ="anotherstring";
我试着重铸指针,但没有成功。
发布于 2011-02-26 05:10:01
当您编写语句时
*src = "anotherstring";
编译器将常量字符串"abcdefghijklmnop"
视为数组。假设您编写了以下代码:
char otherstring[14] = "anotherstring";
...
*src = otherstring;
现在,事情变得更清楚了。左边的*src
指的是指针(因为src
的类型是char
- to -char
),而右边的otherstring
指的是指针。
这并不是严格禁止的,因为您可能希望存储指针所指向的地址。但是,在这种情况下通常会使用显式强制转换(这种情况并不常见)。编译器抛出了一个危险信号,因为您的代码可能不会像您认为的那样工作。
在我看来,您正在尝试分配一个字符串。C中的字符串不是像在C++中那样的数据类型,而是用char
数组实现的。你不能像你想做的那样直接给一个字符串赋值。相反,您需要使用像strncpy
和<string.h>
中的朋友这样的函数,并使用char
数组而不是char
指针。如果您只想让指针指向不同的静态字符串,则删除*
。
发布于 2011-02-26 04:27:10
表达式*src
指的是字符串中的第一个字符,而不是整个字符串。要将src
重新指定为指向不同的字符串tgt
,请使用src = tgt;
。
发布于 2011-02-26 05:42:47
警告来自于您在赋值中取消引用src
的事实。表达式*src
的类型为char
,这是一个整型。表达式"anotherstring"
具有类型char [14]
,在此特定上下文中,该类型被隐式转换为类型char *
,其值是数组中第一个字符的地址。因此,您最终尝试将指针值分配给整数类型,因此出现警告。从*src
中删除*
,它应该会按预期工作:
src = "anotherstring";
因为src
的类型是char *
。
https://stackoverflow.com/questions/5122231
复制相似问题