gpt4 book ai didi

C - 继续陷入无限循环

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

我遇到了以下循环的问题。这个想法是循环遍历一个字符串并获取每两个值(特别是十六进制),然后将该值存储到一个数组中。然后,字符串的长度将减少 2,因为这两个值将不会包含在下一次迭代中。

我一直遇到的问题是字符串的最后两个字符不断被添加到每个新副本中。第一个副本没问题,然后第二个副本会将最后两个字符附加到字符串(因此最后两个元素的两个副本将位于字符串的末尾),然后第三个副本将再次附加值,它永远不会停止。

我在这里缺少什么吗?是否有更好的方法来解决这个问题?

 PC = d; //assign counter the value of the address
unsigned int c;
char copy[500]; //copy of instruction set

int i = 0;

while (strlen(value) > 0) {
sscanf(value,"%2x",&c); //get every two hex chars from string and that value to c
allocMem[d+i] = (char) c; //put value of c in array
strncpy(copy,value+2,strlen(value)-2); //get a copy of new value of the string
strcpy(value,copy); //copy new value to value variable
i += 2;

d++;
}

最佳答案

函数strncpy不会终止新字符串,因为它在找到终止符之前就达到了给定的长度限制。因此,当您 strcpy 返回原始字符串时,您传递给 strcpy 的不是一个字符串,而是一个未终止的数组。

要包含终止符,您必须使副本长度比 strlen(value)-2 长 1 次

strncpy(copy, value+2, strlen(value) - 1); 

或者,为了避免来回复制带来的困惑,您可以使用指针来简化它,例如本例中:

#include <stdio.h>

int main(void){
char value[] = "abcdef";
char *ptr = value;
unsigned c;
while(sscanf(ptr, "%2x", &c) == 1) {
printf("%X\n", c);
ptr += 2;
}
}

程序输出

AB
CD
EF

关于C - 继续陷入无限循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45665576/

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