gpt4 book ai didi

c - memcpy 遇到问题

转载 作者:行者123 更新时间:2023-11-30 20:49:28 26 4
gpt4 key购买 nike

我正在使用的代码:

char** list  
char** final;
char* target;
char* replace;
int wCounter, cCounter, i, hashCounter = 0, addLetter = 0;
int copyWord, countChars, numOfWords, finalWords = 0, temp;

//stuff here

for(wCounter; wCounter < temp + numOfWords; wCounter++, finalWords++)
{
printf("Original string: %s\n", list[wCounter+1]);
final[finalWords] = strstr(list[wCounter+1], target);

if(final[finalWords] != NULL)
memcpy(final[finalWords], replace, strlen(target));

printf("Final string: %s\n\n", final[finalWords]);
}

//stuff here

我的程序输出:

Target string = h   Replacement string = j

Original string: hello
Final string: jello //works!!!

Original string: happy birthday
Final string: jappy birthday // should be jappy birtjday

Target string = ra Replacement string = ar

Original string: radar
Final string: ardar //works!!!

Original string: are you ready
Final string: (null) //awkward

Original string: pirate radio rating
Final string: arte radio rating //should be piarte ardio arting

Target string = x Replacement string = zz

Original string: exit
Final string: zit //should be zzit

Original string: x-ray
Final string: z-ray //should be zz-ray

Original string: xerox
Final string: zerox //should be zzerox

我的程序有一个目标字符串(例如“h”)它还有一个替换字符串(例如“j”)

每次看到“h”时,都应该将其替换为“j”

生日快乐应该是 jappy birtjday。

最佳答案

好的,您的代码存在几个问题。

首先:strstr 仅返回指向要匹配的序列第一次出现的指针(有关详细信息,请参阅 here)。所以你永远不会得到指向第二次或第三次出现的指针。您需要在这里重新设计您的概念。

其次:只有当替换的长度与要替换的部分的长度相同时,使用 memcopy 来替换某些内容才有效。考虑以下示例:

Address:  0123456789ABCD
Original: This is a test
Target: is
Replacement foo

请注意,替换超出了目标的长度。现在你的代码中发生了什么? strstr 返回地址 2。您现在将此指针传递给 memcpy。您得到的是以下字符串:Thfo is a test

请注意,“foo”的第二个“o”丢失了。这是因为您只复制目标字符串的字节数。如果您复制的字节数与替换的字节数一样多,那么您最终会得到类似 Thfoois a test 的字符串。好一点了不是吗?

我建议重新考虑您的解决方案概念。也许更好的方法是通过目标字符串的出现来“标记”字符串并连接元素以获得所需的结果。

关于c - memcpy 遇到问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14807152/

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