C 将 char 转换为 char*

Posted

技术标签:

【中文标题】C 将 char 转换为 char*【英文标题】:C Convert char into char* 【发布时间】:2012-07-01 08:51:22 【问题描述】:

我有一个来自fgetschar,我想知道如何将它转换为char*

我确信这之前已经发布过,但我找不到一个正在做我想做的事的人。任何答案表示赞赏。

编辑: 这是代码。

char *filename = "file.txt";
FILE *file = fopen(filename, "r");
if(file != NULL) 
  char line[260];
  char *fl;
  while(fgets(line, sizeof line, file) != NULL) 
    // here I combine some strings with the 'line' variable.
    str_replace(line, "\"", "\"\""); // A custom function, but it only takes char*'s.
  
  printf(fl);
  printf("\n");
 else 
  printf(" -- *ERROR* Couldn't open file.\n");

【问题讨论】:

不,你没有。 fgets() 返回 char* 结果,而不是 char。请让我们更好地了解您想要做什么,最好发布一些实际代码。 哦。我的错。这意味着我不再需要这个问题了。 那么您可以(并且应该)自己删除问题。 @KeithThompson 它有一个赞成的答案,OP 不能再删除它了。 #define TOCHARARRAY(c) ( \ char arr[] = c, 0 ; \ arr; \ ) 【参考方案1】:

首先,linechars 的数组,因此可以以与 char * 大致相同的方式进行操作(有关重要​​差异,请参阅 comp.lang.c FAQs),所以你不需要需要担心。

但是,如果您想回答一般性问题...

& 运算符是您所需要的:

char c;
char *pChar = &c;

但是,请记住 pChar 是指向 char 的指针,并且仅当 c 在范围内时才有效。这意味着您不能从函数中返回 pChar 并期望它起作用;它将指向堆的某些部分,你不能指望它保持有效。

如果要将其作为返回值传递,则需要 malloc 一些内存,然后使用指针写入 c 的值:

char c;
char *pChar = malloc(sizeof(char));

/* check pChar is not null */

*pChar = c;

【讨论】:

"linechar *,因为它是 chars 的数组" -- 不,数组不是指针。阅读comp.lang.c FAQ 的第 6 部分。 @KeithThompson:“……尽管它们密切相关”。 Question 6.2 问题 6.2 清楚地表明它们是完全不同的概念。是的,它们密切相关;任何编程语言中的许多概念也是如此。有一个普遍的误解,认为 C 数组真的是指针。我们不要添加它。 善于概括,但我认为如果它使用两个字符的数组,这个答案会好很多,第一个是 c,第二个是 NUL,展示了如何“转换”一个字符到一个以 NUL 结尾的字符串...编辑:啊,我看到丹尼尔就是这样做的...【参考方案2】:

使用& 运算符将为您提供指向该字符的指针,正如 Dancrumb 所提到的,但是正如他所提到的,存在范围阻止您返回指针的问题。

我必须补充的一点是,我想您想要char* 的原因是您可以将它用作printf 中的字符串或类似的东西。您不能以这种方式使用它,因为字符串不会被NULL 终止。要将char 转换为字符串,您需要执行类似的操作

char c = 'a';
char *ptr = malloc(2*sizeof(char));
ptr[0] = c;
ptr[1] = '\0';

别忘了稍后释放ptr

【讨论】:

malloc 参数:sizeof(char)1 按标准;你只能写:malloc(2) 相当于。 @Jack,有什么特别的理由这样做,而不是遵循使用sizeof 的通常公式? 当 char 被强制为字节时,将字符数转换为字节数似乎不必要地冗长。在为foo 的副本分配空间时,您会写malloc((strlen(foo)+1)*sizeof(char)) 吗?无论如何,我更喜欢foo = malloc(n*sizeof *foo),不管 foo 的类型如何。

以上是关于C 将 char 转换为 char*的主要内容,如果未能解决你的问题,请参考以下文章

如何将char数组转换为CString

C语言 int转char

将 int(C::*)(int, char) 类型转换为 int(int, char) 类型

将C的char数组转换为C++的字符串

将 char 转换为 int 的奇怪错误(目标 C)

将 char 转换为 int [C]