解析后返回值具有超出定义数组大小的不需要的值

问题描述

我正在尝试为具有 8 字节页面写入缓冲区的小型 EEPROM 进行一些手动分页。 我创建的代码可以在在线工具中正常工作。但是,当我在我的编程环境中实现它时,这让我很难,尤其是在解析的页面获取正确的值。

如果你愿意,你可以检查一下自己; Click here for the code

或者你也可以从这里看到;

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

int main(){
  uint8_t * buffer =  "123456789ABCDEFGHIJKLM";
  uint8_t length = strlen(buffer);
  uint8_t pagesize = 8;
  uint8_t pagecount = length / pagesize;
  
  
  if ((length % pagesize) >= 0){
    pagecount++;
  }
  
  char memRet[8];
  char *retVal = memRet;
  
  for (uint8_t p = 1; p < pagecount + 1; p++){
    printf("Page # %d => ",p); 
    retVal = GetPageParsed(buffer,pagesize,p);
    printf("GetPageParsed : %s \n",retVal);  
  }
  
  return 0;
}

uint8_t * GetPageParsed(uint8_t * buffer,uint8_t pageSize,uint8_t page){
  char MemVal[8]; // If pageSize is used to determine the size of the array dynamically,for some reason,the array filled up with extra values!
  char *RetVal = MemVal;
  uint8_t i = 0;
  
  uint8_t StartAddress = pageSize * (page - 1);
  for (int p = StartAddress; p < pageSize * page; p++){
    RetVal[i] = buffer[p];
    i++;
  } 
  return RetVal;
}

当我在线运行它时,我得到了这个结果;

Page # 1 => GetPageParsed : 12345678
Page # 2 => GetPageParsed : 9ABCDEFG
Page # 3 => GetPageParsed : HIJKLM

但是,当我在我的程序中运行时;

Page # 1 => 12345678\001\b\240/ Page # 2 => 9ABCDEFG\002\b\240/ Page # 3 => HIJKLM

这是完全相同的代码。但是,在我的程序中,结果有所不同。即使我通过按字符数组(char memRet[8];char MemVal[8];)分配内存来规定我需要 8 个字节

我很确定我错过了什么。感谢您从现在开始提供的宝贵意见。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)