老问题了,函数返回指向常字符串的指针,形如 char *func()

摘自《c专家编程》,作为备忘

1. 直接返回简单的字符串

char *func() { return "Simple string demo!\n"}

这是最简单的解决方案,字符串常量存储在只读存储区,如果字符串需要通过计算得到,这种方式就不能使用

2. 使用全局字符数组

这种方式很容易理解,不多解释。但是全局变量尽量少用!

3. 使用静态数组,形如

char *func()
{
    static char buffer[BUF_SIZE];
    ...
    return buffer;
}

通过这种方式,只有拥有指向该数组的指针的函数才能修改这个静态数组

4. 通过malloc动态分配内存

char *func()
{
    char *s = malloc(100);
    ...
    return s;
}

5. 调用者通过malloc分配内存,并且调用函数的参数中指定缓冲区的大小

void func(char *result, int size)
{
    strncpy(result, "That‘s be in the data segment!", size);
}

buffer = malloc(size);
func(buffer, size);
    ...
free(buffer);
时间: 2024-08-12 10:01:21

老问题了,函数返回指向常字符串的指针,形如 char *func()的相关文章

c之指向常字符串的指针做加法

先看一小段代码 #include<string.h> int main() { size_t len = 0; const char* id = "abcdefghijklmn"; len = strlen(id); if (len > 3) { id += len - 3 ; } return 0; } 乍一看,觉得这段代码一定是有问题,id是一个指向常量字符串的指针,还能做加减? 但是,指针当然能做加减呀.id不是一个常指针,当然能够改变,就算id是一个常指针,也

C++ Primer 学习笔记_17_从C到C++(3)--引用、const引用、引用传递、引用作为函数返回值、引用与指针区别

欢迎大家阅读参考,如有错误或疑问请留言纠正,谢谢 一.引用 1.引用是给一个变量起别名 变量: 名称 空间 引用: 引用不是变量 引用仅仅是变量的别名 引用没有自己独立的空间 引用要与它所引用的变量共享空间 对引用所做的改变实际上是对它所引用的变量的改变 引用在定义的时候必须要进行初始化 引用一经初始化,不能重新指向其他变量 2.定义引用的一般格式: (1)类型  &引用名 = 变量名: (2)例如: int a=1; int &b=a; // b是a的别名,因此a和b是同一个单元 (3)

C语言 编写字符串操作函数strrchr,在字符串中查找目标字符最后一次出现的位置,返回指向这次位置的指针。

#include<stdio.h> #include<string.h> const char *my_strrchr(char const *str,int ch) { int i=0,len=0; len=strlen(str); for(i=len-1;i>=0;i--) { if(str[i]==ch) { return str+i; } } return NULL; } int main() { char ch='c'; char src[]="abcde

函数返回值为字符串的几种写法

#include <cstdio> #include <cstring> #include <iostream> #include <string> #include <Windows.h> using namespace std; void fun(char *s){//通过形参返回字符串 strcpy(s, "hello"); } char *fun2(char *s){//另一种写法, strcpy(s, "h

Ajax回调函数返回的中文字符串乱码问题

通过ajax提交请求,返回的response所带的中文字符串一直显示为乱码,写了如下代码也无效: response.setCharacterEncoding("UTF-8"); response.getWriter().print("返回结果"); 后来在web.xml 添加如下描述,终于解决问题: <filter> <filter-name>CharacterEncodingFilter</filter-name> <fi

【转】函数返回局部变量

(看到C++ Primer(P.225)“return reference to local object”时有点懵,然后找到了这篇博文.) 一般的来说,函数是可以返回局部变量的. 局部变量的作用域只在函数内部,在函数返回后,局部变量的内存已经释放了.因此,如果函数返回的是局部变量的值,不涉及地址,程序不会出错.但是如果返回的是局部变量的地址(指针)的话,程序运行后会出错.因为函数只是把指针复制后返回了,但是指针指向的内容已经被释放了,这样指针指向的内容就是不可预料的内容,调用就会出错.准确的来

c/c++: c++函数返回类型什么情况带const

c++ 函数的返回类型,包括const 什么时候起作用呢? 函数返回值不想其立即修改的. 例子如下,这是一个简单的避免产生隐形返回变量的方法,abc 的函数返回是引用,main函数中第10行,++ 操作是基于 const int & 类型,所以会出错,但以后对改引用的操作不会受到const 约束. 这样的好处是避免了函数返回值与操作符的逻辑错误结合,例如下面的例子中函数返回的++,对于main 函数是不直观的,进一步的应用是在操作符重载方面,见下一情况说明. 1 const int & a

函数返回局部指针变量是否可行?

我们大家都知道指针函数的返回指针不能指向函数内的自动变量,如果需要返回函数的内部变量的话,就需要将该变量声明为静态变量.为什么函数能够返回 静态变量的地址而不能返回局部自动变量的地址,到底什么样的对象能够返回其地址,而什么样的对象不能够返回其地址?静态变量与局部自动变量的主要区别是什 么? 要想明白这些就需要理解程序的内存布局情况 程序的存储区域分为:代码段.只读数据段.已初始化的读写数据段.未初始化的数据段.堆.栈. 1.代码段.只读数据段.已初始化的读写数据段.未初始化的数据段都属于静态区域

用c语言实现 将src指向的字符串追加到dest指向字符串的后面

/*实现char * my_strcat(char * dest,char *src)函数. 返回: dest字符串的地址. 功能:将src指向的字符串追加到dest指向字符串的后面. 例如:char dest[10] = "andef"; char *src = "ghi"; my_strcat();之后,dest指向的字符串为"andefghi". */ #include <stdio.h> #include <string