c - 地址的值(value)。给出异常(exception)

标签 c printf

我正在尝试在微 Controller 上打印一段内存。

它提示这条线:

stringLength += sprintf(buffer + stringLength, "0x%X, ", *(startAddress + i));

由于:

*(startAddress + i)

为什么这不起作用?它不应该只给我地址的值吗?

在 ARM 微 Controller 上工作,它会跳转到 HardFault_Handler()(通常表示非法内存访问)。

我怎样才能明智地获取内存位置的值?

整个函数:

void printMemory(uint32_t *startAddress, uint32_t lengthInBytes)
{
    uint32_t stringLength = 0;
    uint32_t i;
    char buffer[1000];
    uint32_t start = (uint32_t) startAddress;

    for (i = start; i < (start + lengthInBytes); i++)
    {
        if ((i % 10) == 0)
        {
            stringLength += sprintf(buffer + stringLength, "\r\n");
        }

        stringLength += sprintf(buffer + stringLength, "0x%X, ", *(startAddress + i));
    }

    //Add line termination.
    stringLength += sprintf(buffer + strlen(buffer), "%c", '\0');

    //Printf buffer.
    printf("%s", &buffer[0]);
}

编辑:

工作示例:

void printMemory(uint32_t startAddress, uint32_t lengthInBytes)
{
    uint32_t i;
    char buffer[1000];
    uint32_t stringLength = 0;
    uint8_t *start;

    //Create a uint8_t pointer to address.
    start = (uint8_t *) startAddress;

    for (i = 0; i < lengthInBytes; i++)
    {
        if ((i % 10) == 0)
        {
            stringLength += sprintf(buffer + stringLength, "\r\n");
        }

        stringLength += sprintf(buffer + stringLength, "0x%X, ", *(start + i));
    }

    //Add line termination.
    stringLength += sprintf(buffer + strlen(buffer), "%c", '\0');

    //Printf buffer.
    printf("%s", &buffer[0]);
}

最佳答案

你犯了一个错误:

istart 开始,也就是 startAddress,所以在第一次迭代中你正在获取:

*(startAddress + startAddress)

关于c - 地址的值(value)。给出异常(exception),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27407353/

相关文章:

c - 堆排序 C - 不正确的输出

c - C 结构填充是否使这种使用不安全?

使用按位运算符的条件语句

c - 在 C 中格式化 float

c - printf 打印出错误的值

c - 说当我将一个项目放在数组的开头时出现段错误

c++ - 并行多次调用一个函数

检查C中是否存在文件。如果存在,则继续读取文件的最后一个值并加一

c - 尽管使用数组的字符,但指向整数的指针不兼容

c - 函数没有返回正确的值