接收字符串作为void指针参数并使用strcpy更改它

时间:2014-06-01 11:26:16

标签: 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;

    strcpy( *pchar, "Mcthat" );
}

我正在尝试使用void参数将Mcwhat转换为Mcthat,但是printf之后给了我一个分段错误。我的错误在哪里?我设法通过char做char,但现在我想改变整个字符串。我没有在关于C的书中找到足够的材料。

3 个答案:

答案 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" );
}