我写了一小段代码。我正在使用 void * 指针来为 C 的基本数据类型创建一个交换函数。我写了这个函数的两个版本,因为字符串与其他基本数据类型有点不同(但也许我错了)。这个函数的版本对于 int、float 和 char 它有效,但是当我尝试将一个用于字符串时,Valgrind 向我报告了多个错误。这是主要的:
int main(){
int dimA=0,dimB=0;
char *v,*g,*str1="heygv",*str2="bag";
v=malloc(strlen(str1)+1);
strcpy(v,str1);
g=malloc(strlen(str2)+1);
strcpy(g,str2);
dimA=strlen(v);
dimB=strlen(g);
printf("\nX : %s %p ,Y : %s %p \n",v,v,g,g);
swapStr(v,g,dimA+1,dimB+1);
printf("\nX : %s %p ,Y : %s %p \n",v,v,g,g);
free(v);
free(g);
return 191;
}
Run Code Online (Sandbox Code Playgroud)
这是交换函数,它可以正常工作并正确交换字符串的值:
void* swapStr(void* a,void* b,int dimA,int dimB){
void* temp=malloc(dimA);
void* ptr;
memcpy(temp,a,dimA);
if(dimB>dimA){
ptr=realloc(a,dimB);
if(ptr==NULL){
printf("\nError 1 realloc in swapStr\n");
return;
}else a=ptr;
}
memcpy(a,b,dimB);
if(dimA>dimB){
ptr=realloc(b,dimA);
if(ptr==NULL){
printf("\nError 2 realloc in swapStr\n"); …Run Code Online (Sandbox Code Playgroud)