c数组问题sprintf
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c数组问题sprintf相关的知识,希望对你有一定的参考价值。
定义keycode[120][5]="",“rew","123","qwerw","45678","waa"…………;char sz[256];在一个while循环里,while(……) sprintf(sz,"%s ",keycode[i]); //每次把keycode数组的值传给sz数组,并且连接成一个字符串。 //怎么用strcat()把每次的连接起来,可是strcat()的第二个参数是const类型啊。 i++;函数不固定,只要是连接成一个长的字符串给sz就行,就像第一次是keycode[2],字符为123,第二次循环keycode[3]为qwerw最后传给sz的字符串是123qwerw这样。叙述的有点乱。求救
字符串是以为\\0结束符的,那几个,"qwerw","45678",光是串长就有5了,带上结束符要占用6个字节,你定义的定长数组只有5个长度,所以是没有结束的假串,只能算是字符数组而不是串,不能用%s这样的操作,如果要用%s作串使用,必需是每个都有结束符的,你要的如下:
char keycode[][6]="",“rew","123","qwerw","45678","waa",;
//一维的下标必需是最长串+1,以保存能存结束符\\0,或都不用定长串,全用指针
//二维下标可以省,用你实际初始化赋值的个数自动处理了
char sz[256]; //有空间但未初始化,第一个用strcpy()可以正常加进来
int i;
for(i = 1, strcpy(sz, keycode[0]); i<sizeof(*keycode) ; i++) strcat(sz, keycode[i]); //全部添加到sz中了
===========用指针不用二维定长数组
char* keycode[] = "",“rew","123","qwerw","45678","waa",; // 对一个指针数组初始化
char sz[256] = 0; //必需初始化为0,下面就可以直接strcat添加进来,省了第一个strcpy()
for(int i = 0; i<sizeof(keycode) /sizeof(char*); i++) strcat(sz, keycode[i]); 参考技术A 1、你非常毛躁,这样提问有谁会认真回答你呢?你都不认真,那别人就更不会认真回答你的问题了。
2、建议你认真的把二维数组、指针和指针数组的定义和初始化看一看!不会走就别急着跑。
C中的sprintf和printf有啥区别? [复制]
【中文标题】C中的sprintf和printf有啥区别? [复制]【英文标题】:What is the difference between sprintf and printf in C? [duplicate]C中的sprintf和printf有什么区别? [复制] 【发布时间】:2017-04-18 08:43:32 【问题描述】:我正在研究 CS50 的 pset4,并且对在 CS50 的恢复.c 问题中在哪里使用 sprintf 感到非常困惑。我想知道在哪里以及在哪里准确使用 sprintf 和 printf。
【问题讨论】:
阅读手册页。 嗯:他们第一个参数的类型不同。 Google 是你的朋友,你知道的。 "...在哪里准确使用 ..":仅在函数执行您需要在该位置执行的操作的地方。如果它无论如何都不能做你想让它做的事情,那么使用它是没有意义的,所以在这种情况下,使用另一个。 (这个建议可以扩展到适用于所有函数,最后有一个包罗万象:如果没有这样的函数,那就写它。) @RadLexus:如果没有这个功能,那么确认这个功能的存在是有意义的;如果是,那么确定为什么还没有人写它;如果没有充分的理由(这极不可能!),那就写吧。 【参考方案1】:sprintf
格式化字符串并将其写入第一个参数指定的字符数组中(假设空间足够); printf
格式化字符串并将其写入stdout
。
例如:您可以使用sprintf
:
char buffer[100];
sprintf(buffer, "My name is %s and I am %d years old", "John Doe", 25);
// buffer now contains "My name is John Doe and I am 25 years old"
但是,如果要将格式化字符串写入标准输出流,则需要使用printf
(或fprintf
,stdout
作为第一个参数):
printf("My name is %s and I am %d years old", "John Doe", 25);
// the text "My name is John Doe and I am 25 years old" gets printed to the stdout stream
【讨论】:
哇,谢谢伙计,它真的帮助了我。 其实没有。它使您免于学习如何进行基础研究。啧啧。以上是关于c数组问题sprintf的主要内容,如果未能解决你的问题,请参考以下文章