在阅读时我遇到了这种类型的声明和以下行 -
const volatile char *p=(const volatile char *) 0x30;
Run Code Online (Sandbox Code Playgroud)
p的值仅由外部条件改变
我没有得到什么是外部条件.还有这种宣言的实际用途是什么?
以下两种铸件有什么区别吗?
int a=10;
int *p=&a;
(void)p; //does not give any warning or error
Run Code Online (Sandbox Code Playgroud)
要么
(void *)p; //error: statement with no effect [-Werror=unused-value]
Run Code Online (Sandbox Code Playgroud)
什么时候遵守 gcc -Wall -Werror --std=c99 -pedantic
刚看到这个答案. (显然我误解了一些事情)
这是我的c代码:
int main()
{
int a;
for (int i = 0; i < 3; i++)
scanf("%d ", &a);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
当我输入类似的东西时1 2 3
,它会要求我输入更多,我需要输入不是''的东西.
但是,当我将其更改为(或其他不是' '
)时
scanf("%d !", &a);
Run Code Online (Sandbox Code Playgroud)
和输入1 ! 2! 3!
,它不会要求更多的输入.
我fseek(..)
在一个非常大的文件中运行性能不佳.每次调用fseek
函数时,我都需要向后移动文件指针位置100 bytes
:
fseek(fp, -100, SEEK_CUR);
Run Code Online (Sandbox Code Playgroud)
以前,我这样做:
fseek(fp, (index)*100, SEEK_SET); // which makes basically the same...
Run Code Online (Sandbox Code Playgroud)
我的问题是fseek如何将指针移动到文件中并将文件指针设置在特定位置.
我认为它需要文件指针并将其向后移动,但现在我认为它真正起作用的是
得到当前位置(cp
)
添加否定索引(p = idx + cp
)
并将文件指针从文件的开头移动到该位置(fseek(fp, p, SEEK_SET)
)
是的,所以我通过做一个基于小文本的RPG游戏学习语言的想法与C一起搞砸了.我按照Java的方式执行游戏的步骤,但有一些不同的解决方法,直到我遇到输出第一个字符串被我输入的第二个字符串部分覆盖的问题.这是问题发生的位(我猜).
struct character{
char firstname[100];
char lastname[100];
};
int main(){
struct character charname;
char first=charname.firstname[100];
char last=charname.lastname[100];
printf("And what do they call you?(First name)\n");
scanf("%s", &first);
printf("Any other names?(Last name)\n");
scanf("%s", &last);
printf("So you are called ");
printf("%s ", &first);
printf("%s ", &last);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我得到的输出是:
他们叫你什么?(名字)鲍勃
还有其他名字吗?(姓)Dole
所以你被称为BDole Dole
我不是BDole Dole而是Bob Dole !!!
有任何想法吗?
(刚刚意识到这里的代码输入有多可怕)
C编程新手,请随时纠正我。
int main()
{
char sent[]="mugiwara is 18 years old";
char str[20];
int i;
sscanf(sent,"%s%*s%d",str,&i);
printf("\n%s->%d",str,i);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
在上面的c程序%*s
中,sscanf
语句在做什么?我尝试删除它,然后在尝试运行该程序时出现垃圾值,请解释。
NULL
是定义在宏<stddef.h>
的null pointer
; 可以定义为((void*)0)
。NULL
是ASCII
字符集中第一个字符的名称。它们之间有什么区别?
当我分配的i
值大于此INT_MAX
代码中的值时 -
#include <stdio.h>
#include <limits.h>
int main()
{
int i;
i=INT_MAX+3;
printf("%d \n",INT_MAX); //INT_MAX = 2147483647
if(i>INT_MAX)
{
printf("OVERFLOW");
}
else
{
printf("%d",i);
}
return 0;
}
Run Code Online (Sandbox Code Playgroud)
因此,在此 as i=INT_MAX+3;
then 条件为真,overflow
应该打印,但它打印了一些negative value
. 这是未定义的行为吗?