从下面的代码片段中可以看出,我已经声明了一个char变量和一个int变量.当代码被编译,就必须确定变量的数据类型str和i.
为什么我需要扫描我的变量,它是通过指定的字符串或整型变量时再次告诉%s或%d给scanf?当我声明我的变量时,编译器是否足够成熟以确定?
#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;
}
Run Code Online (Sandbox Code Playgroud) gcc 4.4.4 c89
将字符串转换为整数值更好.
我尝试了两种不同的方法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;
}
Run Code Online (Sandbox Code Playgroud)
或使用atoi
device_num = atoi(digits);
Run Code Online (Sandbox Code Playgroud)
我认为sscanf会更好,因为你可以检查错误.但是,atoi没有做任何检查.
我正在寻找与sscanf()Python 相当的东西.我想解析/proc/net/*文件,在CI中可以做这样的事情:
int matches = sscanf(
buffer,
"%*d: %64[0-9A-Fa-f]:%X %64[0-9A-Fa-f]:%X %*X %*X:%*X %*X:%*X %*X %*d %*d %ld %*512s\n",
local_addr, &local_port, rem_addr, &rem_port, &inode);
Run Code Online (Sandbox Code Playgroud)
我首先想到的是str.split,但是它不会拆分给定的字符,而是整个sep字符串:
>>> lines = open("/proc/net/dev").readlines()
>>> for l in lines[2:]:
>>> cols = l.split(string.whitespace + ":")
>>> print len(cols)
1
Run Code Online (Sandbox Code Playgroud)
如上所述,应该返回17.
是否有一个等价于sscanf(不是RE)的Python ,或者标准库中的字符串拆分函数,它分裂了我不知道的任何一系列字符?
我想知道它的缺点scanf().
在许多站点中,我已经读过使用scanf可能导致缓冲区溢出.这是什么原因?还有其他缺点scanf吗?
如果我不知道这个词有多长,我就不会写char m[6];,
这个词的长度可能是十到二十个.如何使用scanf键盘输入?
#include <stdio.h>
int main(void)
{
char m[6];
printf("please input a string with length=5\n");
scanf("%s",&m);
printf("this is the string: %s\n", m);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
请输入一个lenght = 5
的字符串
你好
这是字符串:hello
如果我有一个整数变量,我可以使用sscanf格式说明符%d,如下所示.
sscanf (line, "Value of integer: %d\n", &my_integer);
Run Code Online (Sandbox Code Playgroud)
我在哪里可以找到格式说明uint8_t,uint16_t,uint32_t和uint64_t?
uint64_t可能有%lu.
我一直在为我的CIS类做一个小练习,并且我对C用于从文件中读取的方法感到困惑.我真正需要做的就是逐行读取文件并使用从每行收集的信息进行一些操作.我尝试使用getline方法和其他没有运气的方法.我的代码目前如下:
int main(char *argc, char* argv[]){
const char *filename = argv[0];
FILE *file = fopen(filename, "r");
char *line = NULL;
while(!feof(file)){
sscanf(line, filename, "%s");
printf("%s\n", line);
}
return 1;
}
Run Code Online (Sandbox Code Playgroud)
现在我用sscanf方法得到一个seg错误,我不知道为什么.我是一名C总裁,只是想知道是否有一些我失踪的大事.谢谢
我想读取用户输入的字符串.我不知道字符串的长度.由于CI中没有字符串声明指针:
char * word;
Run Code Online (Sandbox Code Playgroud)
并用于scanf从键盘读取输入:
scanf("%s" , word) ;
Run Code Online (Sandbox Code Playgroud)
但是我遇到了分段错误.
当长度未知时,如何从C中读取键盘输入?
我有一个小的C程序,它只是从stdin读取数字,每个循环周期一个.如果用户输入了一些NaN,则应该向控制台输出错误,输入提示应该再次返回.输入"0"时,循环应该结束,给定的正/负值的数量应该打印到控制台.这是程序:
#include <stdio.h>
int main()
{
int number, p = 0, n = 0;
while (1) {
printf("-> ");
if (scanf("%d", &number) == 0) {
printf("Err...\n");
continue;
}
if (number > 0) p++;
else if (number < 0) n++;
else break; /* 0 given */
}
printf("Read %d positive and %d negative numbers\n", p, n);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我的问题是,在输入一些非数字(如"a")时,这会导致无限循环一遍又一遍地写" - > Err ...".我想这是一个scanf()问题,我知道这个函数可以被更安全的替换,但这个例子适用于初学者,只知道printf/scanf,if-else和循环.
我已经阅读了这个问题的答案并浏览了其他问题,但没有真正回答这个具体问题.
当sscanf()该scanf族或该族的另一个函数被赋予一个数字序列时,其转换值超过目标整数类型的最大值,