gpt4 book ai didi

c - 如何将数据从字符串复制到结构体中的字段

转载 作者:行者123 更新时间:2023-11-30 18:46:21 29 4
gpt4 key购买 nike

我知道这段代码很草率,我正在尝试重新学习 C 中的字符串操作。如果我有一个字符串 ABBCCCD 并且我想将单独的字母存储在一个结构中,是否有一个有效的方法怎么办?下面我有一些代码来演示我正在尝试做的事情的漫长过程。 (另外,在执行 strncpy 时是否必须手动添加空终止符?)

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

typedef struct dst_struct {
char a[2];
char b[3];
char c[4];
char d[2];
} dst_struct_t;

int main(void) {
char* test = "ABBCCCD";
char* src = malloc(strlen(test)+1);
strncpy(src, test, strlen(test)+1);
printf("%s\n", src);

dst_struct_t dst;

strncpy(dst.a, src, 1);
strncpy(dst.b, src+1, 2);
strncpy(dst.c, src+3, 3);
strncpy(dst.d, src+6, 1);


printf("dst.a: %s\n", dst.a);
printf("dst.b: %s\n", dst.b);
printf("dst.c: %s\n", dst.c);
printf("dst.d: %s\n", dst.d);

free(src);


}

最佳答案

除了不需要先将 test 复制到 src 之外,实际上没有更好的方法可以做到这一点。

您还需要向所有字符串添加空终止符。最好编写一个执行以下两个步骤的函数:strncpy() 并添加 null 终止符。

function copy_n(char *dest, char *src, size_t offset, size_t len) {
strncpy(src+offset, dest, len);
dest[len] = '\0';
}

int main(void) {
char* test = "ABBCCCD";

copy_n(dst.a, test, 0, 1);
copy_n(dst.b, test, 1, 2);
copy_n(dst.c, test, 3, 3);
copy_n(dst.d, test, 6, 1);

printf("dst.a: %s\n", dst.a);
printf("dst.b: %s\n", dst.b);
printf("dst.c: %s\n", dst.c);
printf("dst.d: %s\n", dst.d);
}

关于c - 如何将数据从字符串复制到结构体中的字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52043749/

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