我有几个关于C语法的问题.
ch = (char *) malloc( sizeof( char ) * strlen(src) );
第一个括号是什么意思(char*)?
c=getch();
switch(c) {
case '1' :{
我的老师问为什么'这种类型'的引号被使用而不是"双重".我说如果使用char变量,它是C语法.但他说不!为什么使用单引号而不是双引号?
有时,当scanf没有任何事情发生时,它已被使用两次来扫描一些东西.这个问题的原因是什么?例如:
printf("enter string \n");
scanf("%s",&str);
printf("enter char \n");
scanf("%c",&ch); //does not scan my char
scanf("%c",&ch); //with this second line do scan my char
Run Code Online (Sandbox Code Playgroud)Alo*_*ave 10
其他人已经正确回答了前两个问题,所以我将回答你的第三个问题:
当您输入character并按Enter键时,输入缓冲区中将放置两个字符character,即newline字符.
您需要考虑这两个因素.因此,First scanf消耗换行符,另一个读取字符.
分步代码分析:
printf("enter string \n");
scanf("%s",&str);
Run Code Online (Sandbox Code Playgroud)
通过以上两个语句,您可以看到Enter the string并编程等待您的输入.我们假设您输入字符C并按Enter键一次.执行此操作时,输入缓冲区接收两个字符:
C你输入的角色&\n该scanf语句只C从输入newline缓冲区中读取一个字符().因此,该字符在Inuput缓冲区中保持未读状态.
printf("enter char \n");
scanf("%c",&ch); //does not scan my char
Run Code Online (Sandbox Code Playgroud)
使用上面的两个语句,enter char显示但scanf只是跳过(不等待任何输入),这是因为newline输入缓冲区中的未读字符由此读取scanf.
因此,要适当地接收下一个输入字符,您需要额外输入scanf.
scanf("%c",&ch); //with this second line do scan my char
Run Code Online (Sandbox Code Playgroud)
ch = (char *) malloc( sizeof( char ) * strlen(src) );
Run Code Online (Sandbox Code Playgroud)
这(char*)是一个演员.它表示将返回值malloc视为指针char.但是,这不是必需的,因为void*返回类型的malloc赋值与C中的所有指针变量兼容.
根据定义,更多的sizeof(char)是虚假sizeof(char) == 1的.最后,这种分配几乎肯定会分配一个元素太少.零终结器需要有空间.
所以,它应该写成:
ch = malloc(strlen(src)+1);
Run Code Online (Sandbox Code Playgroud)
至于'1',这是一个char字面意思.它有类型int.
这不是太混淆,"1"哪个是字符串文字,类型char*,指向包含两个字符的内存块的指针,'1'后跟\0.
至于问题3,我不清楚你的意思,在任何情况下,我都会按照时间规则调用一个问题来证明不解决它!其他人已经回答了你.
| 归档时间: |
|
| 查看次数: |
5149 次 |
| 最近记录: |