C 中使用强制转换将字符串转换为 int

标签 c string casting type-conversion

我有一个字符串(五个字符),我尝试进行 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_tuintptr_t ,定义于 <stdint.h>以保证您不会丢失信息(但这样做几乎没有意义)。

强制转换(显式转换)可以被认为是一种告诉编译器您确切知道自己在做什么,并覆盖类型检查(这是一种过于简单化)的方法。如果您确实知道自己在做什么,那就很好。如果你不这样做,你很可能会搬起石头砸自己的脚。

您正在尝试获取与字符串相对应的唯一值。你的实际目标是什么?为什么不能使用字符串本身作为唯一值?

另外,这个:

scanf("%s",s);

不安全。它将从标准输入读取任意长度的以空格分隔的字符序列。通过定义char s[5] ,您只为 4 个字符的字符串留出了足够的空间(加上 1 作为终止 '\0' )。如果用户输入的字符超过此数量,多余的字符将破坏其他内存,从而产生不可预测的结果(技术术语是未定义行为)。

关于C 中使用强制转换将字符串转换为 int,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28547902/

相关文章:

c - sscanf 在未知大小的矩阵上的用法?

c# - C# 上价格/现金/货币的文本框

c - 从 int 间接转换为 int *

c - C语言中如何统计某个字符在数组中出现的次数?

java - Alternate CodingBat sumNumbers 练习解法

在 C 中将项目强制转换到链表末尾

java - 转换为自定义 ArrayList

c - 一些迭代后重新分配损坏 C

c - 从用户获取多个整数作为输入

c - 13.1.4 之前的 LXVD2X 是否有内置的 XL C?