gpt4 book ai didi

c - 编写 memset 函数时出现问题

转载 作者:行者123 更新时间:2023-11-30 18:27:03 24 4
gpt4 key购买 nike

我正在编写memset函数,我的代码如下,我遇到了问题

void* memsetFun(void* pointer, int c, int size) {

if ( pointer != NULL && size > 0 ) {

unsigned char* pChar = pointer;


int i = 0;

for ( i = 0; i < size; ++i) {

unsigned char temp = (unsigned char) c;

*pChar++ = temp; // or pChar[i] = temp (they both don't work)

}
}
return pointer;


}

我也尝试过 pChar[i] = 我们想要的值,但仍然不起作用。它给了我一些没有任何意义的垃圾数字。

我称之为:

memsetFun(address, num, size);
printf("value at %p is %d\n", address, *((int*) address));

我调用地址的地方(我只是输入地址)

例如,如果您要打印字符 ( c ),它会打印出一个奇怪的字符,看起来像 ( 对于值 4 )

0 0
0 4

最佳答案

您的代码对我来说看起来不错,并且这里有几个人评论说它可以在他们的系统上运行。

所以显而易见的事情就是调试它 - 这是一项将来会派上用场的技能:-) 你应该现在学习它。

运行下面的代码会输出什么?

void* memsetFun(void* pointer, int c, int size) {
printf("A %x %d %d\n", pointer, c, size);
if ( pointer != NULL && size > 0 ) {
printf("B\n");
unsigned char* pChar = pointer;
int i = 0;
for ( i = 0; i < size; ++i) {
printf("C %d (%d)", i, *pChar);
unsigned char temp = (unsigned char) c;
*pChar++ = temp; // or pChar[i] = temp (they both don't work)
printf(" -> (%d)", i, *(pChar-1));
}
}
printf("D\n");
return pointer;
}

从输出中,应该清楚代码所采用的路径以及您的参数是什么(这将极大地帮助调试过程)。

更新:

如果您用零以外的任何内容填充内存块并使用此:

printf("value at %p is %d\n", address, *((int*) address));

将其打印出来,您得到奇怪的结果。

您基本上是要求将其中一些字节解释为整数。因此,例如,如果您用 0x02 字节填充它并且您有一个 4 字节整数类型,您将得到整数 0x02020202 (33686018), 0x02 如您所料。如果您想查看第一个字符值是什么,请使用:

printf("value at %p is %d\n", address, *((char*) address));

根据您的最新问题更新:

For example, if you to print the chars ( c ) it prints like a weird char that looks like ( for the value 4 )
0 0
0 4

如果这是单个字符并且您将其作为字符打印,则可能根本没有任何问题。许多输出流都会为您提供控制字符(在本例中为 CTRL-D,ASCII 代码 4)。如果您用 ASCII 代码 0x30 (48) 填充它,您会看到字符“0”或 ASCII 0x41 (65) 将为您提供“A”。

关于c - 编写 memset 函数时出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1898371/

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