我有一个字符串(五个字符),我尝试进行 int 转换以将整个字符串转换为唯一值。它有效,但我想知道转换过程中会发生什么。例如
int main(){
char s[6];
int number;
Scanf("%s",s);
Number=(int)s;
Printf("%d",number);}
谢谢
最佳答案
您尝试使用的方法似乎不起作用。
s
是一个数组表达式。在大多数(但不是全部!)上下文中,数组表达式会隐式转换为指向其第一个元素的指针。
所以你有:
char s[5];
int number;
number = (int)s;
s
,隐式转换后,生成指向数组第一个元素的指针,相当于 &s[0]
。转换将该指针值转换为类型 int
,产生的结果可能完全有意义,也可能根本没有意义(如果系统上的指针恰好比 int
更宽,它可能会丢失信息)。
你说它“有效”,但它根本没有达到你的预期。保存相同字符串值的两个不同数组将具有不同的地址,并且可能会产生不同的 int
转换后的值。
如果要跟踪每个数组对象的不同地址,请使用指针,而不是整数。如果出于某种原因,您需要与地址对应的不同整数值,请使用类型 intptr_t
或uintptr_t
,定义于 <stdint.h>
以保证您不会丢失信息(但这样做几乎没有意义)。
强制转换(显式转换)可以被认为是一种告诉编译器您确切知道自己在做什么,并覆盖类型检查(这是一种过于简单化)的方法。如果您确实知道自己在做什么,那就很好。如果你不这样做,你很可能会搬起石头砸自己的脚。
您正在尝试获取与字符串相对应的唯一值。你的实际目标是什么?为什么不能使用字符串本身作为唯一值?
另外,这个:
scanf("%s",s);
不安全。它将从标准输入读取任意长度的以空格分隔的字符序列。通过定义char s[5]
,您只为 4 个字符的字符串留出了足够的空间(加上 1 作为终止 '\0'
)。如果用户输入的字符超过此数量,多余的字符将破坏其他内存,从而产生不可预测的结果(技术术语是未定义行为)。
关于C 中使用强制转换将字符串转换为 int,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28547902/