接收字符串作为空指针参数,并使用strcpy对其进行更改
代码如下:接收字符串作为空指针参数,并使用strcpy对其进行更改,c,C,代码如下: #include <stdio.h> #include <string.h> void print (void*); int main (void) { char *a = "Mcwhat"; print(&a); printf("\n%s", a); return 0; } void print (void *text) { char* pchar[5]; *pchar = (char*)text;
#include <stdio.h>
#include <string.h>
void print (void*);
int main (void)
{
char *a = "Mcwhat";
print(&a);
printf("\n%s", a);
return 0;
}
void print (void *text)
{
char* pchar[5];
*pchar = (char*)text;
strcpy( *pchar, "Mcthat" );
}
#包括
#包括
作废打印(作废*);
内部主(空)
{
char*a=“Mcwhat”;
打印(&a);
printf(“\n%s”,a);
返回0;
}
作废打印(作废*文本)
{
char*pchar[5];
*pchar=(char*)文本;
strcpy(*pchar,“Mcthat”);
}
我试图使用void参数将Mcwhat转换为Mcthat,但printf随后给了我一个分段错误。我的错在哪里?我设法一个字符一个字符地做,但现在我想更改整个字符串。在我的C语言书中没有找到足够的资料。就这样写吧
void print (char *text)
{
strcpy( text, "Mcthat" );
}
但是要确保文本的大小足够大,可以将中的“Mcthat”
放入其中
同样在main
中:
print(a);
而不是
print(&a); // would requite void print (char** text)
整个谢邦:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
void print (void*);
int main (void)
{
char *a = malloc(strlen("Mcwhat")+1);
print(a);
printf("\n%s\n", a);
free(a);
return 0;
}
void print (void *text)
{
strcpy(text, "Mcthat" );
}
#包括
#包括
#包括
作废打印(作废*);
内部主(空)
{
char*a=malloc(strlen(“Mcwhat”)+1);
印刷品(a);
printf(“\n%s\n”,a);
免费(a);
返回0;
}
作废打印(作废*文本)
{
strcpy(文本,“Mcthat”);
}
您的代码中有很多问题:
1.字符数组应该足够大以存储字符串<代码>字符[5]
无法保存Mswhat。2.
char*pchar[5]
声明5个字符指针,而您需要一个指向字符数组的字符指针
我已经改正了
#include <stdio.h>
#include <string.h>
void print (char*);
int main (void)
{
char *a = malloc(10);
strcpy(a,"Mcwhat");
print(a);
printf("\n%s", a);
free(a);
return 0;
}
void print (char *text)
{
char *pchar = text;
strcpy( pchar, "Mcthat" );
}
#包括
#包括
空白打印(字符*);
内部主(空)
{
char*a=malloc(10);
strcpy(a,“Mcwhat”);
印刷品(a);
printf(“\n%s”,a);
免费(a);
返回0;
}
无效打印(字符*文本)
{
char*pchar=文本;
strcpy(pchar,Mcthat);
}
保持简单,注意变量的类型:
#include <stdio.h>
#include <string.h>
void print (void*);
int main()
{
char a[] = "Mcwhat"; // a is now a read-write array
print(a); // a decays to a pointer, don't take its adress or you'll get a pointer-to-pointer
printf("\n%s", a);
return 0;
}
void print (void *text)
{
strcpy( text, "Mcthat" ); // Don't dereference text here
}
#包括
#包括
作废打印(作废*);
int main()
{
char a[]=“Mcwhat”//a现在是一个读写数组
print(a);//a衰减为指针,不要获取它的地址,否则会得到指向指针的指针
printf(“\n%s”,a);
返回0;
}
作废打印(作废*文本)
{
strcpy(text,“Mcthat”);//不要在此处取消引用文本
}
请注意,这个“打印”功能在所有可以想象的方面都是不安全的,但这不是问题所在。使用
void*
是个坏主意。你一下子就删除了编译器的很多功能为什么你们一定要投票否决我?这是一个很好的问题,网站上没有类似的问题,只有有限的人能够回答。更正了吗?你显然在泄露内存。打印的前两行甚至没有意义,您正在分配指针两次。分段错误:#0 004016F3打印(text=0x405064)(E:\Projects and Documents\Programming\C\CodeBlocks\Tester#1\main.C:16)#1 004016D2 main()(E:\Projects and Documents\Programming\C\CodeBlocks\Tester#1\main.C:9)编辑以查看整个内容。没有segfault,我测试过。这段代码将7个字节写入一个6字节长的缓冲区。