Concat字符串(未结束......) [英] Concat string (not ended ...)

查看:68
本文介绍了Concat字符串(未结束......)的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述




如果我需要连接一些字符串,我该怎么办?

通用代码:


char CMD_INIT [] = {''\''',''\''',''\''',''\\'0'',''\''',' '\''',''Z'',''0'','0'',

''\ '2''};

char CMD_HOLD [] = {''\\\ t2''};

char CMD_TXT_GREEN [] = {''\ 34'',''\ '62''};

char MSG [] = {''T'',''e'','s'','t''};

char CMD_END [] = {' '\ 04''};

i想做点什么


CMD_INIT + CMD_HOLD + CMD_TXT_GREEN + MSG + CMD_END

hi

if i need to concat some string, how can i do it?
Generic Code:

char CMD_INIT[]={''\0'', ''\0'', ''\0'', ''\0'', ''\0'', ''\1'', ''Z'', ''0'', ''0'',
''\2''};
char CMD_HOLD[]={''\142''};
char CMD_TXT_GREEN[]={''\34'',''\62''};
char MSG[]={''T'',''e'',''s'',''t''};
char CMD_END[]={''\04''};
i would like to do something

CMD_INIT + CMD_HOLD + CMD_TXT_GREEN + MSG + CMD_END

推荐答案



collinm写道:


collinm wrote:
hi

如果我需要连接一些字符串,我该怎么做?

通用代码:

char CMD_INIT [] = {''\ 0'',''\ 0', ''\''',''\''',''\'',''\''',''Z'','0'','0'',
''\ 2''};
char CMD_HOLD [] = {''\\\}'}}
char CMD_TXT_GREEN [] = {''\ 34'', ''\ '62''};
char MSG [] = {''T'',''e'','s'','t''};
char CMD_END [] = {''\ 04''};

i想做点什么

CMD_INIT + CMD_HOLD + CMD_TXT_GREEN + MSG + CMD_END
hi

if i need to concat some string, how can i do it?
Generic Code:

char CMD_INIT[]={''\0'', ''\0'', ''\0'', ''\0'', ''\0'', ''\1'', ''Z'', ''0'', ''0'',
''\2''};
char CMD_HOLD[]={''\142''};
char CMD_TXT_GREEN[]={''\34'',''\62''};
char MSG[]={''T'',''e'',''s'',''t''};
char CMD_END[]={''\04''};
i would like to do something

CMD_INIT + CMD_HOLD + CMD_TXT_GREEN + MSG + CMD_END



命名法:A字符串是一个字符数组

包含一些有效负载字符(可能是

none)后跟一个值为零的字符。只有

以上五个阵列中的第一个符合字符串,

且该字符串的长度为零。 (我不是说这个只是为了迂腐,而是警告你不要试图使用任何C'的字符串操作函数来操作 b
这些数组上的
。它们不是字符串,如果你将它们输入

它们就会出现期望字符串的函数,所有地狱都会破坏

松散。)


如果您想要的是一个包含五个给定数组中所有

字符的数组,您可以这样做


#include< string.h> /* 是的我知道。相信我。 * /


char ALL [sizeof CMD_INIT + sizeof CMD_HOLD

+ sizeof CMD_TXT_GREEN + sizeof MSG

+ sizeof CMD_END];

char * p = ALL;

memcpy(p,CMD_INIT,sizeof CMD_INIT);

p + = sizeof CMD_INIT;

memcpy(p,CMD_HOLD,sizeof CMD_HOLD);

p + = sizeof CMD_HOLD;

memcpy(p,CMD_TXT_GREEN,sizeof CMD_TXT_GREEN);

p + = sizeof CMD_TXT_GREEN;

memcpy(p,MSG,sizeof MSG);

p + = sizeof MSG;

memcpy(p,CMD_END ,sizeof CMD_END);

p + = sizeof CMD_END; / *可选* /


(指针'p''只是一个方便,可以分发

,代价是更多打字。)


如果那不是你想要的,你需要进一步解释




-
Er*********@sun.com



Nomenclature: A "string" is an array of characters
containing some number of "payload" characters (perhaps
none) followed by a character with the value zero. Only
the first of the five arrays above qualifies as a "string,"
and that string has zero length. (I''m not saying this
merely to be pedantic, but to warn you against trying to
use any of C''s string-manipulating functions to operate
on these arrays. They are not strings, and if you feed
them to functions that expect strings all Hell will break
loose.)

If what you want is one array containing all the
characters from the five given arrays, you can do

#include <string.h> /* Yes, I know. Trust me. */

char ALL[sizeof CMD_INIT + sizeof CMD_HOLD
+ sizeof CMD_TXT_GREEN + sizeof MSG
+ sizeof CMD_END];
char *p = ALL;
memcpy (p, CMD_INIT, sizeof CMD_INIT);
p += sizeof CMD_INIT;
memcpy (p, CMD_HOLD, sizeof CMD_HOLD);
p += sizeof CMD_HOLD;
memcpy (p, CMD_TXT_GREEN, sizeof CMD_TXT_GREEN);
p += sizeof CMD_TXT_GREEN;
memcpy (p, MSG, sizeof MSG);
p += sizeof MSG;
memcpy (p, CMD_END, sizeof CMD_END);
p += sizeof CMD_END; /* optional */

(The pointer `p'' is just a convenience and could be dispensed
with at the cost of more typing.)

If that''s not what you want, you''ll need to explain
further.

--
Er*********@sun.com




Eric Sosman写道:


#include< string.h> /* 是的我知道。相信我。 * /

Eric Sosman wrote:

#include <string.h> /* Yes, I know. Trust me. */

char ALL [sizeof CMD_INIT + sizeof CMD_HOLD
+ sizeof CMD_TXT_GREEN + sizeof MSG
+ sizeof CMD_END];
char * p = ALL ;
memcpy(p,CMD_INIT,sizeof CMD_INIT);
p + = sizeof CMD_INIT;
memcpy(p,CMD_HOLD,sizeof CMD_HOLD);
p + = sizeof CMD_HOLD;
memcpy(p,CMD_TXT_GREEN,sizeof CMD_TXT_GREEN);
p + = sizeof CMD_TXT_GREEN;
memcpy(p,MSG,sizeof MSG);
p + = sizeof MSG; memcpy(p,CMD_END,sizeof CMD_END);
p + = sizeof CMD_END; / * optional * /

char ALL[sizeof CMD_INIT + sizeof CMD_HOLD
+ sizeof CMD_TXT_GREEN + sizeof MSG
+ sizeof CMD_END];
char *p = ALL;
memcpy (p, CMD_INIT, sizeof CMD_INIT);
p += sizeof CMD_INIT;
memcpy (p, CMD_HOLD, sizeof CMD_HOLD);
p += sizeof CMD_HOLD;
memcpy (p, CMD_TXT_GREEN, sizeof CMD_TXT_GREEN);
p += sizeof CMD_TXT_GREEN;
memcpy (p, MSG, sizeof MSG);
p += sizeof MSG;
memcpy (p, CMD_END, sizeof CMD_END);
p += sizeof CMD_END; /* optional */




i需要添加一个字符,这是我的代码:


void analyzeFilename(char * filename ,int size,char * led_line)

// void analyzeFilename()

{

#ifdef DEBUG

printf(" analyzeFilename \ n");

#endif


printf(" led_line:%s \ n",led_line);


char CMD_INIT [] = {''\''',''\ 0'',''\''',''\''',' '\0'',''\''',''Z'',''0'','0'',

''\''''};

char CMD_TEXT_FILE_TYPE [] = {''A''};

char CMD_FILE_LABEL = filename [0]; //得到第一个字符

文件名

char CMD_HOLD [] = {''\\\ t2''};

char CMD_TXT_GREEN [ ] = {''\ '34'',''\ '62''};

char CMD_END [] = {''\ '04''};

char ALL [sizeof(CMD_INIT)+ sizeof(CMD_TEXT_FILE_TYPE)+

sizeof(CMD_FILE_LABEL)+ sizeof(CMD_HOLD)+ sizeof(CMD_TXT_GREEN)+

size + sizeof(CMD_END)];


char * p = ALL;


memcpy(p,CMD_INIT,sizeof(CMD_INIT));

p + = sizeof(CMD_INIT);

memcpy(p,CMD_TEXT_FILE_TYPE,sizeof(CMD_TEXT_FILE_TYPE));

p + = sizeof(CMD_TEXT_FILE_TYPE);

memcpy(p,CMD_FILE_LABEL,sizeof(CMD_FILE_LABEL)); //问题在这里

p + = sizeof(CMD_FILE_LABEL);

memcpy(p,CMD_HOLD,sizeof(CMD_HOLD));

p + = sizeof (CMD_HOLD);

memcpy(p,CMD_TXT_GREEN,sizeof(CMD_TXT_GREEN));

p + = sizeof(CMD_TXT_GREEN);

memcpy(p ,filename,sizeof(size));

p + = sizeof(size);

memcpy(p,CMD_END,sizeof(CMD_END));

p + = sizeof(CMD_END);


printf(" msg complet:%s",p);


... 。

....

}


i遇到问题:


memcpy(p,CMD_FILE_LABEL,sizeof(CMD_FILE_LABEL));


这里的消息:


警告:传递`memcpy'的arg 2 '使用整数制作指针而没有

施放


i我不知道为什么会出现这个错误以及如何解决它




collinm写道:


collinm wrote:
[...]
char CMD_FILE_LABEL = filename [0 ]。 //获取
文件名的第一个字符
[...]
我遇到了问题:

memcpy(p,CMD_FILE_LABEL,sizeof(CMD_FILE_LABEL)) ;

这里的消息:

警告:传递`memcpy'的arg 2'使得整数指针没有


我不知道为什么我会得到这个错误以及如何解决它
[...]
char CMD_FILE_LABEL=filename[0]; //get the first character of
filename
[...]
i got a problem with:

memcpy (p, CMD_FILE_LABEL, sizeof(CMD_FILE_LABEL));

the message here:

warning: passing arg 2 of `memcpy'' makes pointer from integer without a
cast

i don''t know why i get this error and how to solve it




这是comp.lang.c中的问题8.1经常

问题(FAQ)列表

http://www.eskimo.com/~scs/C-faq/top.html


....以及对第6节的评论也是一个好主意。


-
Er ** *******@sun.com



This is Question 8.1 in the comp.lang.c Frequently
Asked Questions (FAQ) list

http://www.eskimo.com/~scs/C-faq/top.html

.... and a review of Section 6 would also be a good idea.

--
Er*********@sun.com


这篇关于Concat字符串(未结束......)的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆