相关疑难解决方法(0)

从函数返回C字符串

我试图从函数返回一个C字符串,但它不起作用.这是我的代码.

char myFunction()
{
    return "My String";
}
Run Code Online (Sandbox Code Playgroud)

在主要我称之为:

int main()
{
  printf("%s",myFunction());
}
Run Code Online (Sandbox Code Playgroud)

我也尝试了一些其他的方法,myFunction但他们没有工作.例如:

char myFunction()
{
  char array[] = "my string";
  return array;
}
Run Code Online (Sandbox Code Playgroud)

注意:我不允许使用指针!

关于这个问题的小背景:有一个功能是找出它是哪个月; 如果它1然后它返回1月等等

因此,当它打印时,它就是这样做的.printf("Month: %s",calculateMonth(month));.现在的问题是如何从calculateMonth函数中返回该字符串.

c

98
推荐指数
5
解决办法
27万
查看次数

char a [] =?string?有什么区别?和char*p =?string?;?

正如标题所说,有什么区别

char a[] = ?string?; and 
char *p = ?string?;  
Run Code Online (Sandbox Code Playgroud)

这个问题在接受我采访时被问到了.我甚至不理解这个说法.

char a[] = ?string?
Run Code Online (Sandbox Code Playgroud)

什么是?运营商?它是字符串的一部分还是具有某些特定含义?

c++ pointers

47
推荐指数
5
解决办法
6万
查看次数

我们可以在C中返回字符串文字

这段代码有效吗?

const char* foo() {
  return "Hello World";
}
Run Code Online (Sandbox Code Playgroud)

也就是说,从C函数返回"Hello World".

const char* str = foo();
Run Code Online (Sandbox Code Playgroud)

str是一个悬垂的指针吗?

PS:上面的函数是从一些实际代码中抽象出来的.我看到有人编写直接返回字符串文字的代码.

c c++ pointers dangling-pointer

38
推荐指数
0
解决办法
2503
查看次数

error:函数返回局部变量的地址

我是C的初学者,我正在自学.我正在创建以下功能:

char *foo(int x){
     if(x < 0){
        char a[1000];
        char b = "blah";
        x = x - 1;
        char *c = foo(x);
        strcpy(a, b);
        strcat(a, c);
        return a;
      }
    blah ...
}
Run Code Online (Sandbox Code Playgroud)

我基本上试图返回一个附加的字符串,但我收到以下错误:

"错误:函数返回局部变量的地址",任何建议,如何解决这个问题?

c return strcpy strcat

24
推荐指数
4
解决办法
8万
查看次数

什么时候C会释放struct的内存

我对C结构和数据类型有疑问.我有一个名为的结构test:

struct test
{
    char* c;
    char* c2;
};
Run Code Online (Sandbox Code Playgroud)

我从函数返回这个结构:

struct test a()
{
    struct test t = { "yeah!", "string" };
    return t;
}
Run Code Online (Sandbox Code Playgroud)

我的问题是结构的内存是自动释放还是我必须通过手动执行此操作free().

[ 评论更新:]

函数a在DLL中,我想在主程序中使用struct.

c dll struct memory-leaks memory-management

6
推荐指数
2
解决办法
127
查看次数

C变量的范围

可能重复:
从函数安全且可移植返回字符串文字地址?
C语言中字符串文字的"生命周期"

您好我有点困惑

char *func()
 {

    return "Hello";
 }
Run Code Online (Sandbox Code Playgroud)

这里"Hello"是字符序列/数组.它是一个局部变量,一旦函数返回它就必须消失.那我们怎么能得到正确的价值呢?

c heap scope local

5
推荐指数
1
解决办法
247
查看次数

在C中返回字符串的正确方法

我有以下代码:

char* get_address_string(PACKAGE* pkg){
    char *c;
    sprintf(c, "%02x:%02x:%02x:%02x:%02x:%02x", pkg->address[0], pkg->address[1], 
        pkg->address[2], pkg->address[3], pkg->address[4], pkg->address[5]);
    return c;
}
Run Code Online (Sandbox Code Playgroud)

代码工作正常.但是,我知道这不是在C中返回字符串的正确方法.我收到警告"c在此函数中使用未初始化".

在C中编写此函数的正确方法是什么?

c string pointers

5
推荐指数
1
解决办法
252
查看次数

返回带有char*的字符串的内联声明

第一个给大家,第一个发布在这里.

今天我发现自己想知道这段代码是否正确,它是由朋友写的时间用于微控制器,我没有机会再问他了.

该程序工作正常,但我不能真正决定它是否运气好运(不要相信编程运气).我甚至不知道这篇文章的标题是否正确,对不起,如果它可能会产生误导.代码:

char  *textStatusErrorMessage( unsigned int codeStatus )
{
    switch ( codeStatus ) {

    case STATUS_1:
        return ( (char  *) " Status: 1 " );
        break;     
    case STATUS_2:
        return ( (char  *) " Status: 2 " );
        break;      
    default:
        sprintf( tmpBuf, " UNKNOWN STATUS   %03d ", codeStatus );
        return ( (char  *) tmpBuf ); //tmpBuf is global
        break;
    }
}
Run Code Online (Sandbox Code Playgroud)

更准确地说,这种语法对我来说有点模糊.

return ( (char  *) " Status: 1 " );
Run Code Online (Sandbox Code Playgroud)

它返回什么的char*?保存"Status:1"字符串在哪里?堆/堆栈???

实现时,字符串在函数的范围内,我假设在使用return语句离开函数后,我无法控制函数本身返回的指针.

从我看到的方式来看,我将拥有一个具有不同可能的字符串选项的全局数组,并返回指向CASE选择的正确数组的指针.所以我知道我返回的指针是一个明确定义的内存区域.

那么这段代码是错还是不错?哪个是最正确的解决方案?

谢谢DAN

c char

3
推荐指数
1
解决办法
514
查看次数

将字符串形式的char指针复制到char指针

char * p_one = "this is  my first char pointer";
char * p_two= "this is second";
strcpy(p_one ,p_two);
Run Code Online (Sandbox Code Playgroud)

考虑上面的代码.这会导致访问冲突错误.所以请帮助理解

  1. 当前"this is my first char pointer"字符串存储在内存中的哪个位置?堆或堆栈
  2. 为什么我需要在调用之前为p_one分配内存strcpy,即使它已经存储了第一个字符串.为什么"this is second"字符串不能复制到同一位置?
  3. 如果我在调用之前为p_one分配内存,strcpy那么"this is my first char pointer"p_one指向的字符串会发生什么?它留在记忆中吗?
  4. 怎么strcpy知道特定指针是否分配了内存?

c++ pointers

0
推荐指数
1
解决办法
1万
查看次数

从函数返回字符串文字真的安全吗?

考虑这段代码:

char *test() {
    return "HELLO";
}

int main() {
    char *p = test();
    printf("%s\n", p);
}
Run Code Online (Sandbox Code Playgroud)

这会在没有警告的情况下进行编译,我猜是因为"HELLO"它没有存储在堆栈中。但这给了我一个警告:

char *test() {
    char arr[] = "HELLO";
    return arr;
}

int main() {
    char *p = test();
    printf("%s\n", p);
}
Run Code Online (Sandbox Code Playgroud)

我的问题是:

  1. 字符串文字真的存储在称为字符串文字池的区域中吗?

  2. 如果是这样,存储在字符串文字池中的数据是否可以被视为全局数据?

  3. 从函数返回字符串文字总是安全的(因为它是全局的)?

c c-strings lifetime string-literals

0
推荐指数
1
解决办法
128
查看次数