求助求助
// talkback.c -- 演示与用户交互#include<stdio.h>
#include<string.h> //提供strlen()函数的原型
#define DENSITY 62.4 //人体密度(单位:磅/立方英尺)
int main()
{
float weight, volume;
int size, letters;
char name; //数组
printf("Hi! What's your first name?\n");
scanf_s("%s", name);
printf("%s, what's your weight in pounds?\n", name);
scanf_s("%f", &weight);
size = sizeof name;
letters = strlen(name);
volume = weight / DENSITY;
printf("Well, %s, your volume is %2.2f cubic feet.\n", name, volume);
printf("Also, your first name has %d letters,\n", letters);
printf("and we have %d butes to store it.\n", size);
return 0;
}
在我编译后,第一次输入参数时,程序就不会继续下去了只会显示
Hi! What's your first name?
abc
然后就不动了。
在vscode里面会显示
0x0F62D4EC (ucrtbased.dll)处(位于 Code list 4.1 talkback.c.exe 中)引发的异常: 0xC0000005: 写入位置 0x00B00000 时发生访问冲突。
并在第一个scanf_s后面打一个×,我用的是vs code 2019。 本帖最后由 jackz007 于 2019-11-7 00:47 编辑
size = sizeof name ; // VC 2019 的函数 sizeof() 可以不用写括号了?
是不是得加上括号?
size = sizeof(name) ;
我用 TDM GCC 5.1.0 成功编译,并成功运行
下面是编译、运行实况:
C:\Bin>g++ -o x x.c
C:\Bin>x
Hi! What's your first name?
jackz007
jackz007 , what's your weight in pounds?
160
Well , jackz007 , your volume is 2.56 cubic feet.
Also, your first name has 8 letters,
and we have 10 bytes to store it.
C:\Bin> jackz007 发表于 2019-11-7 00:44
size = sizeof name ; // VC 2019 的函数 sizeof() 可以不用写括号了?
是不是得加 ...
sizeof不是函数
#include <stdio.h>
int main(void)
{
char name;
printf("%u\n", sizeof name);
return 0;
}
// 20
// 请按任意键继续. . .
人造人 发表于 2019-11-7 01:07
sizeof不是函数
sizeof name 还用算吗,不是定义的 20 吗?
sizeof 这么用还是头一次见,算是开眼了。 jackz007 发表于 2019-11-7 01:12
sizeof name 还用算吗,不是定义的 20 吗?
sizeof 这么用还是头一次见,算是开眼了。
#include <stdio.h>
int main(void)
{
int arr;
size_t arr_size = sizeof arr;
printf("%u\n", arr_size);
return 0;
}
// 40
// 请按任意键继续. . .
这次呢?你总不能说一个int是4个字节,4 * 10 = 40个字节吧?
int在不同的环境下大小很可能会不同,保险的做法就是使用sizeof关键字,让编译器来告诉我们arr占用的内存大小
楼上的两位你们跑偏了。。
回答楼主的问题
scanf_s作为scanf的“安全版”,为了防止溢出,在读取字符串时,需要同时提供字符串长度: scanf_s("%s", name,sizeof(name)); 楼主用的啥编译器?
我用VScode如果函数使用不正确,会有智能提示,不用调试都知道肯定通不过编译器的检查 bin554385863 发表于 2019-11-7 09:10
楼主用的啥编译器?
我用VScode如果函数使用不正确,会有智能提示,不用调试都知道肯定通不过编译器的检查
我用的VS CODE啊。 Croper 发表于 2019-11-7 06:30
楼上的两位你们跑偏了。。
回答楼主的问题
感谢感谢,您的方法解决了我的问题。sizeof(name)是不是相当于量体裁衣? 人造人 发表于 2019-11-7 02:05
这次呢?你总不能说一个int是4个字节,4 * 10 = 40个字节吧?
int在不同的环境下大小很可能会不同, ...
感谢回复,本人知识有限,并不能完全理解您的意思。 jackz007 发表于 2019-11-7 01:12
sizeof name 还用算吗,不是定义的 20 吗?
sizeof 这么用还是头一次见,算是开眼了。
感谢回复。
上面代码,为抄写C primer plus第6版,第4章,程序清单4.1 talkback.c程序。
由于我刚学到这里,就直接抄写下来,先运行试试。
事先并不知道sizeof的具体用法。 初触 发表于 2019-11-7 10:59
我用的VS CODE啊。
VScode函数不正确会有提示
bin554385863 发表于 2019-11-7 11:26
VScode函数不正确会有提示
哦哦,知道了,谢谢啊
页:
[1]