C - 继续陷入无限循环

标签 c loops iteration

我遇到了以下循环的问题。这个想法是循环遍历一个字符串并获取每两个值(特别是十六进制),然后将该值存储到一个数组中。然后,字符串的长度将减少 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/

相关文章:

python - 在 Python 中检查循环

python - 遍历元组列表

file - 继续从文件中的当前行进行迭代

c - opencv 无法与 NetBeans 一起使用

c - 队列函数的棘手 C 代码,指针发生了什么?

c - STM32 I2C 设置 SDA 为低电平

loops - 将 C/C++ for 循环转换为 CUDA

c# - 在 x.Kind = "value"时选择 Top(x)

java - MongoDB Java驱动程序: distinct and iterative

谁能用写模式解释我的 popen()