如何在 C 中将 const char * 转换为 char * ?

在我的项目中,有一个方法只返回一个 const char*,而我需要一个 char*字符串,因为 API 不接受 const char*

知道如何在 const char*char*之间转换吗?

240506 次浏览

首先,只有在确实有必要的情况下才应该这样做——例如,对 char*参数使用一些没有修改的旧式 API。如果一个 API 函数修改了原来是 const 的字符串,那么这是未指定的行为,很可能会崩溃。

使用石膏:

(char*)const_char_ptr

为了安全起见,你不会破坏一些东西(例如,当这些字符串在你的代码中被修改或者更进一步) ,或者使你的程序崩溃(例如,如果返回的字符串是字面的,例如 "hello I'm a literal string",你开始编辑它) ,复制一个返回的字符串。

您可以为此使用 strdup(),但请阅读 小字体。或者你当然可以创建你自己的版本,如果它不在你的平台上。

你可以通过做 (char *)Identifier_Of_Const_char来施放它

但是 API 不接受 const cahr *可能是有原因的, 你应该这样做,如果你确定,函数不会尝试分配任何值在你的 const char*范围内,你强制一个非常数。

您可以使用具有以下原型的 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表示“只读”内存位置。而没有 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);