这篇“C语言中%*s的*有什么作用”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“C语言中%*s的*有什么作用”文章吧。
取决于在 scanf
中使用还是在 printf
中使用。
在
scanf
中使用,则添加了*
的部分会被忽略,不会被参数获取。例如:int a,b;char b[10];scanf("%d%*s",&a,b);
输入为:
12 abc
那么12
将会读取到变量a
中,但是后面的abc
将在读取之后抛弃,不赋予任何变量(例如这里的字符数组b
)在
printf
中使用,表示用后面的形参替代的位置,实现动态格式输出。例如:printf("%s", 10, s);/意思是输出字符串 s,但至少占10个位置,不足的在字符串s左边补空格,这里等同于 printf("%10s", s);*/
在举个例子,假如要打印 linux 根文件系统下的
/proc/x/status
中的第一行 “Name: login
”,如下
[root@sz /proc/898]#cat status Name: loginState: S (sleeping)Tgid: 898Pid: 898PPid: 519TracerPid: 0Uid: 0 0 0 0Gid: 0 0 0 0FDSize: 32Groups:VmPeak: 1232 kBVmSize: 1232 kBVmLck: 0 kBVmPin: 0 kBVmHWM: 312 kBVmRSS: 312 kBVmData: 64 kBVmStk: 136 kBVmExe: 708 kBVmLib: 312 kBVmPTE: 8 kBVmSwap: 0 kBThreads: 1SigQ: 0/469SigPnd: 0000000000000000ShdPnd: 0000000000000000SigBlk: 0000000000000000SigIgn: 0000000000000000SigCgt: 0000000000002000CapInh: 0000000000000000CapPrm: 0000001fffffffffCapEff: 0000001fffffffffCapBnd: 0000001fffffffffCpus_allowed: 1Cpus_allowed_list: 0Mems_allowed: 1Mems_allowed_list: 0voluntary_ctxt_switches: 1nonvoluntary_ctxt_switches: 2
为了只获取 “Name: login
”中的 login
,可以采用如下
//描述: 线程是否存在//返回: 成功表示存在,返回true,反之为false。bool IsThreadExist(char *task_name) { DIR *dir; struct dirent *ptr; FILE *fp; char filepath[50]; char cur_task_name[50]; char buf[BUF_SIZE]; bool fRet = false; dir = opendir("/proc"); if (NULL != dir) { while ((ptr = readdir(dir)) != NULL) { if ((strcmp(ptr->d_name, ".") == 0) || (strcmp(ptr->d_name, "..") == 0)) continue; if (DT_DIR != ptr->d_type) continue; sprintf(filepath, "/proc/%s/status", ptr->d_name); fp = fopen(filepath, "r"); if (NULL != fp) { if( fgets(buf, BUF_SIZE-1, fp)== NULL ){ fclose(fp); continue; } sscanf(buf, "%*s %s", cur_task_name); if (strcmp(task_name, cur_task_name) == 0){ fRet = true; } fclose(fp); } } closedir(dir); } return fRet; }
以上就是关于“C语言中%*s的*有什么作用”这篇文章的内容,相信大家都有了一定的了解,希望小编分享的内容对大家有帮助,若想了解更多相关的知识内容,请关注编程网行业资讯频道。