以下是代码:
#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" );
}
我正在尝试使用void参数将Mcwhat转换为Mcthat,但是printf之后给了我一个分段错误。我的错误在哪里?我设法通过char做char,但现在我想改变整个字符串。我没有在关于C的书中找到足够的材料。
答案 0 :(得分:1)
您的代码中存在很多问题:
1.字符数组应足够大以存储字符串。 char[5]
无法容纳Mswhat。
2. char* pchar [5]
声明了5个char指针,而你需要一个指向char数组的char指针。
我已经纠正过了。
#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" );
}
答案 1 :(得分:1)
保持简单并注意变量的类型:
#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
}
请注意,这&#34; print&#34;功能在所有可以想象的方面都是不安全的,但这不是问题所在。
答案 2 :(得分:0)
就这样写吧
void print (char *text)
{
strcpy( text, "Mcthat" );
}
但请确保text
的大小足以将"Mcthat"
放入其中。
同样在main
:
print(a);
而不是
print(&a); // would requite void print (char** text)
整个shebang:
#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" );
}