gpt4 book ai didi

c - 打印 C 字符串时出现不需要的字符

转载 作者:行者123 更新时间:2023-11-30 20:32:58 25 4
gpt4 key购买 nike

在很大程度上,我下面的代码可以满足我的需求。唯一的问题是它在字符串前面打印额外不需要的非 ASCII 字符。

我尝试在 longestConsec() 函数中打印字符串,发现它已经包含不需要的字符,所以我知道问题出在函数中。

此外,我尝试循环遍历 res (使用我通过 malloc() 分配给它的长度)将字符设置为空格;这有效,但我不需要前导和尾随空格,并且如果不需要,我不想编写算法来删除它。

如果我做了什么导致出现这些不需要的字符,那么我宁愿解决这个问题,而不是通过将所有内容设置为空白然后修剪它来解决问题。

如有任何帮助,我们将不胜感激。

输出:

Expected Output:threefourthreefour
Output: ÉmthreefourÉmthreefour
Output with white space replacement: threefour threefour

代码:

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

char* longestConsec(char* strarr[], int n, int k)
{
int i = 0;
int longest = 0;
int longestIndex = 0;
for(; i < n; i++) {
if(longest < strlen(strarr[i])) {
longestIndex = i;
longest = strlen(strarr[i]);
}
}
//printf("%d", longestIndex);
int length = 0;
i = longestIndex;
int j = 0;
for(; i < n && j < k; i++, j++) {
length += strlen(strarr[i]);
}
char* res = malloc(length * sizeof(char));
int m = 0;
for(; m < length; m++) {
res[m] = ' ';
}

i = longestIndex;
j = 0;

//printf("%s", res);
for(; i < n && j < k; i++, j++) {
strcat(res, strarr[i]);
}
printf("%s", res);
return res;
}



int main()
{
char* strs[10] = {"One", "Two", "three", "four", "five", "six", "seven", "eight", "nine", "ten"};
printf("%s", longestConsec(strs, 10, 2));
return 0;
}

最佳答案

前导“意外”字符的问题是因为对 strcat() 的调用开始在遇到 NUL 字节的地方放置字符。

这可能在内存中的任何地方(即未定义的行为,而无需在代码中设置 NUL 字节。)

与在已分配内存中设置所有字节的循环或调用 calloc() 相比,更好的方法是将已分配内存的第一个字节设置为 NUL I.E.

res[0] = '\0';

然后对 strcat() 的以下调用将正常工作。

关于c - 打印 C 字符串时出现不需要的字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46557761/

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