小编Lid*_*Guo的帖子

既然我们有snprintf,为什么我们没有snscanf?

我有snprintf它可以避免缓冲区溢出,但为什么没有调用函数snscanf

码:

int main()
{
     char * src = "helloeveryone";
     char buf1[5];
     sscanf(src,"%s",buf1); // here is a  array out of bounds

}
Run Code Online (Sandbox Code Playgroud)

所以,我认为snscanf还需要一个.为什么我们只有snprintf

c posix

15
推荐指数
3
解决办法
1万
查看次数

无符号字符c = 255是"11111111"还是不是?

这是我的问题代码:

#include "stdio.h"

int main()
{
        char a = -1;
        unsigned char b = 255;
        unsigned char c = 0;
        if((~a) ==  c)
                printf("OK 1");
        else
                printf("bad 1");
        printf("\n");
        if((~b) ==  c)
                printf("OK 2");
        else
                printf("bad 2");
        printf("\n");
}
Run Code Online (Sandbox Code Playgroud)

我希望这打印:

OK 1

OK 2
Run Code Online (Sandbox Code Playgroud)

但是,我得到了1和坏2!

如果unsigned char b是255(11111111),那么~b应该是00000000.为什么它不等于c?

我使用gcc在Linux SUSE上工作.

c binary char

9
推荐指数
1
解决办法
3874
查看次数

有没有更快的方法来检测游戏功能?

我有一场比赛.屏幕上将随机显示5种符号.如果屏幕上有3个或更多相同符号,则玩家赢得一些钱.

举例来说,如果我有符号A,B,C,D,E,和F.

F 可以替代任何其他种类的符号(通配符).

因此,当AAABCAFABB在屏幕上出现,这意味着我赢得了3-A胜利.如果AAFBB屏幕上出现,这意味着我赢得既是一个3-A3-B赢.

现在我有一个关于屏幕上显示内容的数组; 我需要找到一种足够快的方法来检测游戏结果.

我现在有这个方法:

我给一个代码,每一个符号:A -> 1,B -> 2,C -> 3,D -> 4,E -> 5,F -> 0xF.

就像我有一个数组:{A,B,C,D,E}我将它们转换为屏幕代码:0x12345.

然后我列出了获胜面具:

0x11111
0x22222
0x33333
0x44444
0x55555
0x11110
0x01111
0x22220
...
0x00111
0x01110
0x11100
Run Code Online (Sandbox Code Playgroud)

我使用屏幕代码,做&每个掩码代码,就像0x111f1 & …

c algorithm

5
推荐指数
1
解决办法
223
查看次数

pthread_mutex_trylock的返回和pthread_mutex_lock的返回之间有什么区别

我阅读了Linux手册页和OpenGroup for pthread_mutex_lock并得到了这个:

如果成功,则pthread_mutex_lock()和pthread_mutex_unlock()函数将返回零,否则,将返回错误编号以指示错误.

如果获取了互斥锁引用的互斥对象上的锁,则pthread_mutex_trylock()函数将返回零.否则,返回错误号以指示错误.

  1. 我对这两行感到困惑.如果你在成功时返回零并且在错误时返回非零,那么他们在哪里写两行?
  2. 我知道互斥锁可以锁定和解锁,但获取互斥锁是什么意思?

c unix linux pthreads

4
推荐指数
1
解决办法
5567
查看次数

typedef一个函数指针类型

我想声明一个指向函数的指针类型,所以我尝试:

typedef void (*print)(void); 工作完美

void (*print)(void); p是一个ponter变量,而不是一个类型.

typedef (void) (*print)(void); 错误预期标识符或'''在'void'之前

typedef void (*)(void) Print;

错误:在'打印'之前预期'=',',',';','asm'或'_ attribute _'.

我的问题是:

  1. 我是否必须使用typedef声明函数指针类型?

  2. 为什么typedef (void) (*print)(void);错了?这()意味着什么?

  3. 为什么我不能这样写:typedef void (*)(void) Print

c pointers typedef function

4
推荐指数
1
解决办法
1万
查看次数

sizeof和一个字节大于8位?

  1. 既然sizeof是运算符,为什么我们可以sizeof(something);像函数调用一样使用?

  2. 什么时候字节不是8位?

此上下文中的字节与unsigned char相同,可能大于8位

是否有可能该字节小于8位?

c bit

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

一元'*'的无效类型参数

我进入一个介绍编程课一周,而我在修复应该是一个相对简单的代码时遇到了麻烦.我一直得到一个'*'错误的无效类型参数.

#include <stdio.h>
#define PI 3.14159; 
int main()
{
   float r;
   float area;
   scanf("%f", &r);
   area = PI * r * r;
   printf("Area is %f", area);
   return 0; 
}
Run Code Online (Sandbox Code Playgroud)

有人可以解释一下,以及如何解决它?

c

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

为什么scanf("%c \n")在stdin中有延迟

好吧,我知道有很多问题scanf,但我仍然想问.我希望有人可以解释这个问题的规则或原则:

代码优先:

   #include <stdio.h>

   int main()
   {
           int c = 'W';
           while(c != 'F'){

                   scanf("%c",&c);
                   printf("c is : %c\n",c);
           }
           return 0;
   }
Run Code Online (Sandbox Code Playgroud)

这是输出:

E
c is : E
c is :                  <--newline

G
c is : G
c is :                  <---newline again

W
c is : W
c is :                  <---newline 

F
c is : F
Run Code Online (Sandbox Code Playgroud)

好吧,我现在还能理解,因为我输入的换行符每次在字母表后按下缓冲区和赋值c.所以,我试试code2:

  #include <stdio.h>

   int main()
   {
           int c = 'W';
           while(c != 'F'){

                   scanf("%c\n",&c);   //<-- the only modified place.
                   printf("c is …
Run Code Online (Sandbox Code Playgroud)

c stdin scanf

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

我可以更改getenv的返回值吗?

我想知道如果我改变内存返回将会发生什么 getenv

我知道这不是一个好的代码.setenv顺便说一句,我知道.

喜欢:

char *new_path = "/home/user/dev/myTry1";
char *path = getenv("PATH");// assume there is : PATH=/home/user/dev/myTry
//now *path = "/home/user/dev/myTry" 
memcpy(path,new_path,strlen(new_path)+1);
Run Code Online (Sandbox Code Playgroud)

这是一个未定义的行为吗?或者只是一个错误的代码?

我试了一下,没有发生错误或分段错误.

c environment-variables

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