在我的项目中,有一个方法只返回一个 const char*,而我需要一个 char*字符串,因为 API 不接受 const char*。
const char*
char*
知道如何在 const char*和 char*之间转换吗?
首先,只有在确实有必要的情况下才应该这样做——例如,对 char*参数使用一些没有修改的旧式 API。如果一个 API 函数修改了原来是 const 的字符串,那么这是未指定的行为,很可能会崩溃。
使用石膏:
(char*)const_char_ptr
为了安全起见,你不会破坏一些东西(例如,当这些字符串在你的代码中被修改或者更进一步) ,或者使你的程序崩溃(例如,如果返回的字符串是字面的,例如 "hello I'm a literal string",你开始编辑它) ,复制一个返回的字符串。
"hello I'm a literal string"
您可以为此使用 strdup(),但请阅读 小字体。或者你当然可以创建你自己的版本,如果它不在你的平台上。
strdup()
你可以通过做 (char *)Identifier_Of_Const_char来施放它
(char *)Identifier_Of_Const_char
但是 API 不接受 const cahr *可能是有原因的, 你应该这样做,如果你确定,函数不会尝试分配任何值在你的 const char*范围内,你强制一个非常数。
const cahr *
您可以使用具有以下原型的 strdup函数
strdup
char *strdup(const char *s1);
使用示例:
#include <string.h> char * my_str = strdup("My string literal!"); char * my_other_str = strdup(some_const_str);
或 strcpy/strncpy 到缓冲区
或者重写函数以使用 const char *作为参数,而不是使用 char *,这样就可以保留 const
const char *
char *
const
指向指针的 const表示“只读”内存位置。而没有 const的是读写内存区域。因此,您“不能”将 const(只读位置)转换为正常(读写)位置。
另一种方法是将数据复制到不同的读写位置,并将此指针传递给所需的函数。您可以使用 strdup()来执行此操作。
要将 const char*转换成 char*,你可以创建一个如下函数:
#include <stdio.h> #include <string.h> #include <stdlib.h> char* unconstchar(const char* s) { if(!s) return NULL; int i; char* res = NULL; res = (char*) malloc(strlen(s)+1); if(!res){ fprintf(stderr, "Memory Allocation Failed! Exiting...\n"); exit(EXIT_FAILURE); } else{ for (i = 0; s[i] != '\0'; i++) { res[i] = s[i]; } res[i] = '\0'; return res; } } int main() { const char* s = "this is bikash"; char* p = unconstchar(s); printf("%s",p); free(p); }
例如,你可以这样写:
const char* a = "art.bin"; char* b = new char[sizeof(a)]; strcpy(b, a);