Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在C中将字符串转换为int_C - Fatal编程技术网

在C中将字符串转换为int

在C中将字符串转换为int,c,C,我正在尝试了解此铸造操作的作用: char w[12] = {0}; int r; r = (int)gets(w); 例如,当输入为156时,r的值为-1073744588,因此它不是简单的整数转换 代码所做的是将get的返回值(指向用户输入字符串的第一个字符的指针)强制转换为int。换句话说,您将字符串的地址放入一个整数,r。但是,地址太高,以至于它在整数r中“环绕”,从而产生较大的负值 您很可能正在尝试将用户的输入转换为int。这是这样做的代码 char buf[80]; int re

我正在尝试了解此铸造操作的作用:

char w[12] = {0};
int r;

r = (int)gets(w);

例如,当输入为156时,r的值为-1073744588,因此它不是简单的整数转换

代码所做的是将
get
的返回值(指向用户输入字符串的第一个字符的指针)强制转换为
int
。换句话说,您将字符串的地址放入一个整数,
r
。但是,地址太高,以至于它在整数
r
中“环绕”,从而产生较大的负值

您很可能正在尝试将用户的输入转换为
int
。这是这样做的代码

char buf[80];
int res;

if (fgets(buf, sizeof buf, stdin))      /* load input into buf */
    if (sscanf(buf, "%d\n", &res) < 1)  /* try to read integer from buf */
        fprintf(stderr, "Bad input\n"); /* input was bad; write error */
charbuf[80];
国际关系;
if(fgets(buf,sizeof buf,stdin))/*将输入加载到buf*/
如果(sscanf(buf),%d\n,&res)<1)/*尝试从buf读取整数*/
fprintf(标准,“错误输入”;/*输入不好;写入错误*/

注意,您应该永远不要使用
get
,因为它有严重的安全问题。使用
fgets
从标准输入中读取一行。

首先不要使用
gets
。可能重复的是,您不是在投射字符串,而是在投射指针。请看,或者最好参考C参考。事实上,这是“一个简单的转换”
gets
返回一个内存地址(这是一个数字),该地址被简单地转换为
int
(可能会给出一个否定的结果,因为通常这种简单的转换没有多大意义)。不知道为什么问一个毫无意义的代码。无论你在哪里找到它,都不要去那个地方,
\n
在那里是多余的。