gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 14:53:48 25 4
gpt4 key购买 nike

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

#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 个参数。所以我的问题是如何将这 3 个字符组合起来,然后从 x[0] 到 x[3] 的读取中获取一个,并将其保存在我可以处理的单独字符中

最佳答案

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

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

您真正需要做的是记住到目前为止复制的内容的长度,并在缓冲区 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;

}

关于c - 我如何重新创建一个字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47002049/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com