我有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?
这是我的问题代码:
#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上工作.
我有一场比赛.屏幕上将随机显示5种符号.如果屏幕上有3个或更多相同符号,则玩家赢得一些钱.
举例来说,如果我有符号A,B,C,D,E,和F.
F 可以替代任何其他种类的符号(通配符).
因此,当AAABC或AFABB在屏幕上出现,这意味着我赢得了3-A胜利.如果AAFBB屏幕上出现,这意味着我赢得既是一个3-A和3-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 & …
我阅读了Linux手册页和OpenGroup for pthread_mutex_lock并得到了这个:
如果成功,则pthread_mutex_lock()和pthread_mutex_unlock()函数将返回零,否则,将返回错误编号以指示错误.
如果获取了互斥锁引用的互斥对象上的锁,则pthread_mutex_trylock()函数将返回零.否则,返回错误号以指示错误.
我想声明一个指向函数的指针类型,所以我尝试:
typedef void (*print)(void);  工作完美
void (*print)(void);   p是一个ponter变量,而不是一个类型.                                                                                                                                                                       
typedef (void) (*print)(void); 错误预期标识符或'''在'void'之前 
typedef void (*)(void) Print; 
错误:在'打印'之前预期'=',',',';','asm'或'_ attribute _'.
我的问题是:
我是否必须使用typedef声明函数指针类型?
为什么typedef (void) (*print)(void);错了?这()意味着什么?
为什么我不能这样写:typedef void (*)(void) Print?
既然sizeof是运算符,为什么我们可以sizeof(something);像函数调用一样使用?
什么时候字节不是8位?
此上下文中的字节与unsigned char相同,可能大于8位
是否有可能该字节小于8位?
我进入一个介绍编程课一周,而我在修复应该是一个相对简单的代码时遇到了麻烦.我一直得到一个'*'错误的无效类型参数.
#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)
有人可以解释一下,以及如何解决它?
好吧,我知道有很多问题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) 我想知道如果我改变内存返回将会发生什么 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)
这是一个未定义的行为吗?或者只是一个错误的代码?
我试了一下,没有发生错误或分段错误.