gpt4 book ai didi

C 在函数中分配指针,不会改变原始指针(void *)

转载 作者:行者123 更新时间:2023-11-30 20:57:29 24 4
gpt4 key购买 nike

我正在尝试为我的 char s[128] 数组分配新值。但执行完函数后,s的地址并没有改变。另一方面,该函数对于整数工作得很好。


void myscanf(const char *type, void *var){
char buffer[128];
memset(buffer,0,sizeof(buffer));
int size = read(0, buffer, 128);
if(strcmp(type, "%d") == 0){
int *d = (int*)var;
*d = buffer[0] - '0';
}
else if(strcmp(type,"%s") == 0){
char* str = (char*) var;
str = buffer;
}
}

int main(){
int d;
char s[128];
myscanf("%s", s);

return 0;
}

最佳答案

char* str = var;(不需要强制转换)将 var void 指针转换为本地存储的 char * 指针,然后覆盖该值的地址为 &buffer[0](buffer 字符数组的第一个元素,隐式衰减)。

这没有明显的影响(并且可以完全优化)。

您可能想要的是通过 var/str 指针从缓冲区复制字符,然后 \0-终止:

char* str = var;
memcpy(str, buffer, size);
str[size]='\0';

请注意,read 应该请求 127 个字节(或者 myscanf 调用者应该提供 128+1 字节的空间),并且您应该已检查 read 调用是否可能失败。

memset 调用是不必要的。

关于C 在函数中分配指针,不会改变原始指针(void *),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59079826/

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