簡體   English   中英

strcat,將char(文本)發送給函數中的參數-c

[英]strcat, send char (text) to argument in function - c

我在函數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數組?

他們都不行。 您需要為分配內存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);
}

您應該使用一個已經分配的變量。 這里的問題是,當使用類似Pointer的指針時:

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");

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM