簡體   English   中英

從C函數返回字符串

[英]return a string from a function in C

我正在學習C,我想實現一個將字符串返回給主函數的函數。 我在這里閱讀了一些主題,但感到困惑。

#include <stdio.h>
#include <string.h>

char myPrint(int); 

int main()
{ 
   char msg[10];

   msg = myPrint(1);

   printf("\n %s \n", msg); 
} 

char myPrint(int n)
{ 
   char msg[10];

   if(n==1)
      strcpy(msg, "ACCEPT");
   else
      strcpy(msg, "DENY");

   return msg;
}

我得到了一堆警告和錯誤的。我讀為的strcpy和有關這個話題很多其他環節的用法,但我沒有得到它..

聲明您的功能為

char *myPrint(int n);

不要從函數中返回局部變量msgmyPrint函數之后它不再存在。

 if(n==1)
     return "ACCEPT";
 else
     return  "DENY";

永遠不要返回指向該函數中分配的變量的指針,因為到返回時,該變量將自動取消分配(與堆分配或靜態分配相反,它是堆棧分配的)。 因此,您可以將char *傳遞給myPrint並從其內部填充char數組。 然后,聲明了char數組的外部函數可以毫無錯誤地訪問它。 請注意,盡管下面的方法仍然不是最佳實踐,因為當一個指針傳遞到一個比“ ACCEPT” +1的長度短(+1表示終止\\ 0字符)的數組時,它允許緩沖區溢出。

void myPrint(char *msg, int n)
{
    if (n == 1)
    {
        strcpy(msg, "ACCEPT");
    }
    else
    {
        strcpy(msg, "DENY");
    }
}

int main()
{
    char msg[10];
    myPrint(msg, 1);
    printf("\n %s \n", msg); 
}

一點建議:在該字符串在函數中定義為局部變量時,返回指向該字符串的指針將不起作用,因為為該字符串分配的內存將無效。

根據示例,如果函數返回文字字符串,則必須按照Acme的說明進行

char *MyPrint (int n)
{
  if (n==1)
    return "ACCEPT";
  else
    return "DENY";
}

當您返回指向char的指針時,不能像在main()那樣嘗試將該指針分配給數組。 您必須將其分配給必須也是char指針的變量:

int main()
{ 
   char *msg;

   msg = myPrint(1);    
   printf("\n %s \n", msg); 
   return 0;
} 

如果需要將結果字符串復制到數組中,則必須使用strcpy() (或更好的yer, strncpy() ),如下所示:

int main()
{ 
   char msg[10];

   strcpy (msg, myPrint(1) ); /* providing that your function won't ever return a string longer than 9 chars, or bad things will happen */
   printf("\n %s \n", msg); 
   return 0;
} 

聲明您的功能為

char *myPrint(char *ptr, int n);  

從您的函數返回字符串。
從您的main功能調用它

printf("\n %s \n", myPrint(msg, 1));  

您的職能

char *myPrint(char *msg, int n)
{ 
    if(n==1)
         strcpy(msg, "ACCEPT");
    else
         strcpy(msg, "DENY");

    return msg;
}    

但是在這種情況下,不需要從函數返回字符串,因為它將更新mainmsg數組。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define STR_SIZE 10

char * myPrint(const int ); 

int main()
{ 
    char *msg = NULL;

    msg = myPrint(1);

    free(myPrint(1));

    printf("\n %s \n", msg);

    return 0;
} 

char * myPrint(const int n)
{ 
    char *msg = (char *) malloc(STR_SIZE * sizeof(char));

    if (n == 1)
        strcpy(msg, "ACCEPT");
    else
        strcpy(msg, "DENY");

    return msg;
}

暫無
暫無

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

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