小编ame*_*yCU的帖子

指针声明为常量和易失性

在阅读时我遇到了这种类型的声明和以下行 -

const volatile char *p=(const volatile char *) 0x30;
Run Code Online (Sandbox Code Playgroud)

p的值仅由外部条件改变

我没有得到什么是外部条件.还有这种宣言的实际用途是什么?

c const volatile

63
推荐指数
6
解决办法
2886
查看次数

将指针转换为void

以下两种铸件有什么区别吗?

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 pointers void

12
推荐指数
2
解决办法
1589
查看次数

使用scanf for for循环

这是我的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!,它不会要求更多的输入.

c

6
推荐指数
1
解决办法
146
查看次数

fseek传递负偏移和SEEK_CUR

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))

c posix fseek

5
推荐指数
2
解决办法
9967
查看次数

C字符串互相覆盖

是的,所以我通过做一个基于小文本的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 string merge overwrite

0
推荐指数
1
解决办法
1015
查看次数

sscanf函数中的%* s是什么意思

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语句在做什么?我尝试删除它,然后在尝试运行该程序时出现垃圾值,请解释。

c scanf

0
推荐指数
1
解决办法
4829
查看次数

NUL和NULL有什么区别?

NULL是定义在宏<stddef.h>null pointer; 可以定义为((void*)0)NULLASCII字符集中第一个字符的名称。它们之间有什么区别?

c

-2
推荐指数
1
解决办法
6056
查看次数

故意分配大于 INT_MAX 的“i”值时出现奇怪的行为

当我分配的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. 这是未定义的行为吗?

c

-8
推荐指数
1
解决办法
274
查看次数

标签 统计

c ×8

const ×1

fseek ×1

merge ×1

overwrite ×1

pointers ×1

posix ×1

scanf ×1

string ×1

void ×1

volatile ×1