当我向固定字符串声明char *
并重用指针指向另一个字符串时
/* initial declaration */
char *src = "abcdefghijklmnop";
.....
/* I get the "warning: assignment makes integer from pointer without a cast" */
*src ="anotherstring";
我试图重新制作指针,但没有成功。
答案 0 :(得分:31)
表达式*src
是指字符串中的第一个字符,而不是整个字符串。要重新指定src
以指向其他字符串tgt
,请使用src = tgt;
。
答案 1 :(得分:29)
撰写声明时
*src = "anotherstring";
编译器将常量字符串"abcdefghijklmnop"
看作数组。想象一下,您已经编写了以下代码:
char otherstring[14] = "anotherstring";
...
*src = otherstring;
现在,发生的事情更加清晰。左侧*src
指的是char
(因为src
的类型是指向 - char
),而右侧是{{1} },指的是一个指针。
这不是严格禁止的,因为您可能希望存储指针指向的地址。但是,在这种情况下通常使用显式强制转换(这种情况并不常见)。编译器会抛出一个红色标记,因为你的代码可能没有按照你的想法行事。
在我看来,你正试图分配一个字符串。 C中的字符串不是像C ++中那样的数据类型,而是使用otherstring
数组实现。您无法直接将值分配给字符串,就像您尝试的那样。相反,您需要使用char
等功能和strncpy
中的朋友,并使用<string.h>
数组而不是char
指针。如果您只希望指针指向不同的静态字符串,请删除char
。
答案 2 :(得分:5)
警告来自您在作业中取消引用src
的事实。表达式*src
具有类型char
,这是一个整数类型。表达式"anotherstring"
具有类型char [14]
,在此特定上下文中,它隐式转换为类型char *
,其值是数组中第一个字符的地址。因此,您最终尝试将指针值分配给整数类型,因此警告。从*
删除*src
,它应该按预期工作:
src = "anotherstring";
因为src
的类型是char *
。
答案 3 :(得分:0)
Jeremiah说了什么,加上编译器发出警告,因为制作:
*src ="anotherstring";
说:取“anotherstring”的地址 - “anotherstring”是一个char指针 - 并将指针通过src(* src = ...)间接存储到字符串“abcdef ...的第一个字符串中... “警告可能令人困惑,因为你的代码中没有任何地方提到任何整数:警告似乎是荒谬的。但是,在幕后看不见的是“int”和“char”在存储方面是同义词的规则:两者占据相同的位数。编译器在发出存储为整数的警告时不区分。 BTW,完全可以合法,但可能不是你想要的代码。
- 皮特