gpt4 book ai didi

c - 字符串末尾的随机字母?

转载 作者:太空宇宙 更新时间:2023-11-04 06:16:23 25 4
gpt4 key购买 nike

void split(char array[]) {
int length, length2, half;
char first_half[BUF], sec_half[BUF];

length = strlen(array);
length2 = length / 2;
length -= length2;

strncpy(first_half, array, length - 1);
strncpy(sec_half, (array + length), length2 - 1);

printf("%s\n", first_half);
printf("%s\n", sec_half);
}

如果输入是“People”,它输出:Pe0z plcy 等...只是想知道这里有什么问题。

我的问题与提到的问题不一样。我不是想在另一个词的中间插入一个词,我是想把一个词分成两半,然后将两半放在两个字符串中。

最佳答案

OP 的问题在于 first_half[BUF]、sec_half[BUF] 肯定不是以空字符结尾的 - strncpy() 的一个缺点。

strncpy( first_half, array, length);
// printf( "%s\n", first_half );
// alternative limited width print, even if `first_half` lacks a null character.
printf( "%.*s\n", length, first_half );

trying to split a word string in half and put the two halves in two strings.

以下是可变长度数组 (VLA) 方法。

我推荐 memcpy(),因为对于长字符串来说,这通常是最快的,而且比 strncpy() 更不容易出错 @Blastfurnace . YMMV .

void split(const char array[]) {
size_t a_length = strlen(array);
size_t l_length = a_length / 2;
size_t r_length = a_length - l_length;
char l_half[l_length + 1], r_half[r_length + 1]; // + 1 for null character

memcpy(l_half, array, l_length);
l_half[l_length] = '\0';
memcpy(r_half, array + l_length, r_length + 1); // +1 for null character

printf("<%s>\n", l_half);
printf("<%s>\n", r_half);
}

size_t 是一种无符号类型,是用于数组索引的大小合适的整数类型。 int 可能不够。请注意,strlen() 返回类型 size_t


如果只需要打印两半,则不需要太多代码:

void split_print(const char array[]) {
int half = strlen(array) / 2;
printf("%.*s\n", half, array);
printf("%s\n", array + half);
}

关于c - 字符串末尾的随机字母?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45046917/

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