这是一个数组:
char *a[]={"I", "LOVE", "C", "PROGRAMMING"};
如何将此数组聚合为c?
中的字符串即,
char b[]="I LOVE C PROGRAMMING";
我曾尝试为每个字符串使用memcpy,但我不知道彼此添加空格。
int width[4];
for(int i=0; i<4; i++)
width[i]=strlen(a[i]);
//aggregate the msg length
int agg_len[4];
int len_w = 0
for (no = 0; no < 4; no++) {
len_w += width[no];
agg_len[no] = len_w;
}
//compose msg
memcpy(b, a[0], width[0]);
for(idx = 1; idx < 4; idx++)
{
memcpy(b+agg_len[idx], a[idx], width[idx]);
}
结果是&#34; ILOVECPROGRAMMING&#34;
如何修复它&#34;我喜欢C编程&#34;
我尝试添加空格,但在使用memcpy
时失败但内存地址错误因为它需要在每个步骤后添加1个长度(&#34;&#34;需要1个长度)
答案 0 :(得分:1)
一种解决方案是找到数组中的字符串数(num),并使新数组的长度为num-1,这样当你编写消息时,只需在完成复制每个单词后添加空格即可。
答案 1 :(得分:1)
制作足够的缓冲区并使用strcat。应该放置空间,除了最后一个。
#include <stdio.h>
#include <string.h>
int
main(int argc, char* argv[]) {
char *a[]={"I", "LOVE", "C", "PROGRAMMING"};
char buf[1024] = {0};
int i, len = sizeof(a)/sizeof(a[0]);
for (i = 0; i < len; i++) {
strcat(buf, a[i]);
if (i < len - 1)
strcat(buf, " ");
}
printf("[%s]\n", buf);
return 0;
}
可能你想要的是sizeof(a)/sizeof(a[0])
?
如果您必须使用**a
代替*a[]
#include <stdio.h>
#include <string.h>
int
main(int argc, char* argv[]) {
char *a[] = {"I", "LOVE", "C", "PROGRAMMING", NULL};
char buf[1024] = {0}, **p = a;
while (*p) {
strcat(buf, *p);
if (*p && *(p + 1))
strcat(buf, " ");
p++;
}
printf("[%s]\n", buf);
return 0;
}
答案 2 :(得分:0)
#include <stdio.h>
#include <string.h>
int main(void){
char *a[]={"I", "LOVE", "C", "PROGRAMMING"};
size_t a_size = 4;
size_t width[a_size], total_size = 0;
for(int i=0; i<a_size; i++){
total_size += (width[i] = strlen(a[i]));
}
char b[total_size + a_size];//between ' '(a_size-1) + NUL(1)
char *p = b;
for(int i=0; i<a_size; ++i){
if(i)
*p++ = ' ';//put space
memcpy(p, a[i], width[i]);
p += width[i];
}
*p = '\0';//put NUL
printf("'%s'\n", b);
return 0;
}