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



我正在尝试为我的 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;(不需要强制转换(将varvoid 指针转换为本地存储的char *指针,然后用&buffer[0]的地址覆盖该值(bufferchar 数组的第一个元素,衰减隐式(。

这没有可观察到的效果(并且可以完全优化(。

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

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

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

memset调用是不必要的。