当sscanf()或scanf系列的另一个函数被赋予一个转换值超过目标整数types最大值的数字序列时, 应该认为转换失败了吗? 是所有定义的行为?
scanf()中格式"%*"的实际用法是什么? 如果这种格式存在,那么背后就有一定的目的。 下面的程序给出了奇怪的输出。 #include<stdio.h> int main() { int i; char str[1024]; printf("Enter text: "); scanf("%*s", &str); printf("%s\n", str); printf("Enter interger: "); scanf("%*d", &i); printf("%d\n", i); return 0; } 输出: manav@workstation:~$ gcc -Wall -pedantic dc dc: In function 'main': dc:8: warning: too many arguments for format dc:12: warning: too many arguments for format manav@manav-workstation:~$ ./a.out Enter […]
如果我有一个整数variables,我可以使用sscanf ,如下所示使用格式说明符%d。 sscanf (line, "Value of integer: %d\n", &my_integer); 我在哪里可以finduint8_t , uint16_t , uint32_t和uint64_t格式说明符? uint64_t可能有%lu。
gcc 4.4.4 c89 将string转换为整数值更好。 我已经尝试了2种不同的方法atoi和sscanf。 两者都按预期工作。 char digits[3] = "34"; int device_num = 0; if(sscanf(digits, "%d", &device_num) == EOF) { fprintf(stderr, "WARNING: Incorrect value for device\n"); return FALSE; } 或使用atoi device_num = atoi(digits); 我以为sscanf会更好,因为你可以检查错误。 但是,atoi没有做任何检查。
正如你可以从下面的代码片断看到的,我已经声明了一个charvariables和一个intvariables。 当代码被编译时,它必须识别variablesstr和i的数据types。 为什么我需要通过指定%s或%d到scanf来扫描我的variables是否是string或整型variables? 编译器不够成熟,无法识别当我声明我的variables? #include <stdio.h> int main () { char str [80]; int i; printf ("Enter your family name: "); scanf ("%s",str); printf ("Enter your age: "); scanf ("%d",&i); return 0; }
我有以下程序 #include <stdio.h> int main(void) { unsigned short int length = 10; printf("Enter length : "); scanf("%u", &length); printf("value is %u \n", length); return 0; } 当使用gcc filename.c编译时,发出以下警告(在scanf()行中)。 warning: format '%u' expects argument of type 'unsigned int *', but argument 2 has type 'short unsigned int *' [-Wformat] 然后我引用了C99 specification – 7.19.6 Formatted input/output functions并且在使用unsigned […]
当我写这个,编译和运行: int x; scanf ("%d", &x); while (x!=4) { scanf ("%d", &x); } 当插入字符或小于4的双数时,input一个无限循环。 当插入大于4的双倍时,它终止。 任何解释?
每当我在fgets之前执行scanf,fgets指令就会被跳过。 我用C ++来讨论这个问题,我记得我不得不进行一些修改,以清除stdin缓冲区或类似的东西。 我想这和C有一个相同的意义。 谢谢。
我试图读取input使用scanf和存储到char * dynamic按照GCC手册指定 ,但它给编译时间错误。 char *string; if (scanf ("%as",&string) != 1){ //some code } else{ printf("%s\n", *string); free(string); //some code }
对于一个项目,我试图从string中读取一个int和一个string。 唯一的问题是,当sscanf看到一个空格时,似乎会破坏读取%s。 有没有办法绕过这个限制? 以下是我想要做的一个例子: #include<stdio.h> #include<stdlib.h> int main(int argc, char** argv) { int age; char* buffer; buffer = malloc(200 * sizeof(char)); sscanf("19 cool kid", "%d %s", &age, buffer); printf("%s is %d years old\n", buffer, age); return 0; } 它打印的是“酷十九岁”,我需要“酷十九岁”。 有谁知道如何解决这个问题?