【问题标题】:strcat, send char (text) to argument in function - cstrcat,将字符(文本)发送到函数中的参数 - c
【发布时间】:2013-10-25 20:48:57
【问题描述】:

我在函数str_cpy中发送&schar array(text)

void str_cpy(char *str_in, char *str_out);

示例(工作):

   void str_cpy(char *str_in, char *str_out);
int main(int argc, char *argv[])
{
   char *s = NULL;
   str_cpy(&s, "Hola Hola");
   puts(&s);
   system("PAUSE");
   return 0;
}

void str_cpy(char *str_in, char *str_out) {
   strcat(str_in, "Hello");
}

不工作(它应该如何工作)

void str_cpy(char *str_in, char *str_out);
int main(int argc, char *argv[])
{
   char *s = NULL;
   str_cpy(&s, "Hola Hola");
   puts(&s);
   system("PAUSE");
   return 0;
}

void str_cpy(char *str_in, char *str_out) {
   strcat(str_in, str_out);
}

我如何编写最后一个函数?如何正确编写函数 str_cpy 或如何在函数中发送 char 数组?

【问题讨论】:

  • 使用以str开头的名称定义自己的函数实际上是不合法的;所有这些名称都是保留的。大多数编译器不会在意,但我想我会指出这一点。
  • 请帮帮我!我找不到这方面的信息!
  • @unwind 我怎样才能写得正确?
  • 通常的初学者问题是,在您了解数组和指针之前,您真的无法在 C 中进行任何字符串处理。
  • @Lundin 谢谢你变化很大! :)

标签: c function char arguments strcat


【解决方案1】:

它们都不行。您需要为s 分配内存。比如:

void str_cpy(char *str_in, char *str_out);
int main(int argc, char *argv[])
{
   char *s = calloc(sizeof(char), 100); //for 100 chars string
   //OR char s[100] = { 0 };

   //------v pass s not &s
   str_cpy(s, "Hola Hola");
   puts(s);   //similary use s not &s
   system("PAUSE");
   return 0;
}

void str_cpy(char *str_in, char *str_out) {
   strcat(str_in, str_out);
}

【讨论】:

  • void str_cpy(char *str_in, char *str_out) { strcat(str_in, str_out); } - 正确吗?
  • 为什么我不能为 s 分配 1 个内存?字符 s[1] = { 0 };
  • @Zai4ik,是的,如果你的 str_in 在我的代码中被初始化为空字符串。 chars[1] 创建大小为 1 的数组,我认为您不希望这样。
  • 并且记得在使用完变量后调用free(),否则会造成内存泄漏。即使大多数操作系统在你的程序完成后都会清理堆,但不清理自己的烂摊子是一种草率的做法。
  • @Zai4ik 那不是“1 内存”,它是一个字节的内存,不足以容纳字符串。但是,您可以分配 足够 内存,例如 char s[100];。它通常比使用 calloc 更好、更安全。
【解决方案2】:

您应该使用已分配的变量。 这里的问题是,当使用像这样的指针时:

char *pointer = NULL;

您没有正确指出任何物理内存地址。 你可以做什么:

char string[32];
char *pointer;

pointer = string; // or pointer = &string[0], which is the same
str_cpy(pointer, "Something");
// Here, pointer holds a real address, so you can work with it.

如果你不想使用2个变量,你可以为它分配内存。

char *pointer;
pointer = (char *) malloc(strlen("Something")+1); 
// Dont forget an extra byte for binary zero who will termine the string
// from now, pointer holds the address of a memory block. It means you can:
strcpy(pointer, "Something");

【讨论】:

    猜你喜欢
    • 2016-12-04
    • 1970-01-01
    • 2012-10-05
    • 1970-01-01
    • 2019-03-26
    • 2014-07-09
    • 2020-12-21
    • 2019-04-08
    • 2014-07-29
    相关资源
    最近更新 更多