0

正如我们在 C 中所知道的,一个字符串定义是,

char string[] = "Hello World";

那没问题,

但是我想使用一个函数,并且在最初相同的时候,我尝试了那些,例如;

char * to_string()
{
    return "Hello World";
}

或者;

char * to_String(void)    // Function
{
    char buff[16];
    sprintf(buff, "%s", "Hello World");
    return buff;
}

main()    // main function
{
   char Initial_String[] = to_String();
}

如何以另一种方式使这个或任何想法相同。

我发现我没有发送 char Initial_String[] 的地址来填写。没有。还有其他方法吗。

谢谢。

4

2 回答 2

0

是的,关于本地缓冲区错误,您是对的,

但这不是我想要的,

如果我以不同的方式编辑,

char buff[16];
char* to_String(void)    // Function
{                      
            //char buff[16];   /*this is a local variable*/
            sprintf(buff, "%s", "Hello World");
            return buff;
}                      

int main(void)    // main function
{                      
           char *Initial_String_1 = to_String();
           char *Initial_String_2 = to_String();
           char *Initial_String_3 = to_String();

           printf("%s", Initial_String_1 );
           printf("%s", Initial_String_2 );
           printf("%s", Initial_String_3 );

在这种情况下,所有字符串都是相同的,因为它们具有相同的缓冲区地址,

我想多开一点话题。

struct
{
     long   aaa;
     short  bbb;
     int    ccc;
     char   ddd;
     .
     .
     .    // the list goes on
}elements;


typedef struct 
{
    int lengt;
    int *adress;
    char name[10];
}_list;

char* to_String(long variable)    // Function
{                      
            sprintf(buff, "%ld", variable);
            return buff;
}  

int main (void)
{
 _list My_List[] = {
                  { sizeof(elements.aaa), &elements.aaa , to_string( elements.aaa) },
                  { sizeof(elements.bbb), &elements.bbb , to_string( elements.bbb) },
                  { sizeof(elements.ccc), &elements.ccc , to_string( elements.ddd) }, 
                  .
                  .
                  . //// the list goes on
                 };

我不知道,我是否让自己清楚。在这里,字符串必须填充到名称数组中,而不是为其分配地址。

我可能有语法错误。代码未经编译器测试。该想法仅用于说明目的。

我正在尝试为目的找到一种方法。

谢谢。

于 2013-04-13T20:15:18.310 回答
0

当你编译它时,至少在 GCC 中,它会给你以下警告: b.c:9: warning: function returns address of local variable 为什么?因为buff[]是函数的局部变量to_string()。它的作用域只在函数内部to_string()main()无权访问此变量。尝试创建buff[]一个全局变量。

第二个问题:char Initial_String[] = to_String();不能以这种方式赋值。to_string()返回一个 char 指针,因此赋值如下:

char *Initial_String = to_String();

下面的代码将起作用:

char buff[16];
char* to_String(void)    // Function
{                      
            //char buff[16];   /*this is a local variable*/
            sprintf(buff, "%s", "Hello World");
            return buff;
}                      

int main(void)    // main function
{                      
           char *Initial_String = to_String();
           printf("%s", Initial_String);
           return 0;
}
于 2013-04-13T18:51:55.440 回答