我如何重新创建一个字符串

时间:2017-10-29 15:39:00

标签: c pic

我正在研究一个用C语言编写的项目,我想要做的是从参数中获取值然后发送到微控制器[pic16f887]然后在微控制器上使用字符串X的另一个代码(例如:x = 1234567890) )我发送,我想读取字符x [0]到x [3]并将值保存在包含D = 1234的其他字符D中。然后从x [4]到x [8]保存在包含F的字符F中= 5678。

#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <string.h>
#include <unistd.h>

char a[50];
char d[50];
char c[50];

int main(int argc, const char * argv[])  {
    strcpy(a, argv[1]);
    strcpy(d, argv[2]);
    strcpy(c, argv[3]);
    strcpy(a, d);
    strcpy(a, c);

    printf("%s",a);
    return 0;
}

这只是一个测试,看看它是如何工作的..但是只输出第三个参数而不是一次输出所有3个参数。 所以我的问题是我如何将这三个字符组合起来然后从一个读取从x [0]到x [3]再保存在一个我可以处理的单独字符中

1 个答案:

答案 0 :(得分:1)

如果我正确理解你的问题,你会尝试连接传递给你的程序的前3个参数。

您遇到的问题是strcpy始终从一开始就复制到缓冲区a,而您假设它将附加到已存储在a中的字符串中。观察该行为的一种方法是将长度递减的命令行参数传递给程序。例如,将其称为./a.out abcde ghij klm将打印klmje,而不是第3个参数。

你真正需要做的是记住你到目前为止所复制的内容的长度,并在缓冲区的开头a之后开始这么多字符。事实上,除了a之外,你甚至不需要额外的缓冲区,缓冲区也不需要是全局的。

以下内容应该符合您的期望:

int main(int argc, const char * argv[])  {
    char a[50];

    char* beginning_of_next_string = a;
    int i = 1;
    for (; i <= 3; ++i) {
        strcpy(beginning_of_next_string, argv[i]);
        beginning_of_next_strings += strlen(argv[i]);
    }

    printf("%s",a);
    return 0; 
}

或者,因为在这种情况下,刺痛不会很长,所以您也可以使用Vasilis建议的strcat来评论您的问题而不会造成很大的性能损失。然后它减少到

int main(int argc, const char * argv[]) {
   char a[50];

   strcpy(a, argv[1]);
   strcat(a, argv[2]);
   strcat(a, argv[3]);

   printf("%s",a);
   return 0; 

}