将char类型转换为char*

14

我有一个通过fgets获得的char,我想知道如何将其转换为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");
}

15
不,你不需要这样做。fgets() 函数返回一个 char* 类型的结果,而不是一个 char。请提供更多实际代码以让我们更好地了解您尝试完成的任务。 - Keith Thompson
然后你可以(而且应该)自己删除这个问题。 - Keith Thompson
@KeithThompson 它有一个被赞的答案,OP 无法再删除它了。 - Daniel Fischer
1
#define TOCHARARRAY(c) ({ \ char arr[] = { c, 0 }; \ arr; \ }) - Jack
@Jack:这使用了“表达式语句”,这是一种非标准的gcc扩展。 - Keith Thompson
显示剩余2条评论
2个回答

31

首先,line是一个字符数组,因此可以像char *一样进行操作(有关重要差异,请参见comp.lang.c FAQs),所以您不必担心它。

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

&运算符就是您需要的:

char c;
char *pChar = &c;

请注意,pChar是指向字符的指针,在c仍在作用域内时才有效。这意味着你不能从函数中返回pChar并期望它能正常工作;它将指向堆的某个部分,你不能期望它保持有效。

如果你想将它作为返回值传递,你需要分配一些内存,然后使用指针来写入c的值:

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

/* check pChar is not null */

*pChar = c;

line是一个char *,因为它是一个char数组”--不,数组不是指针。请阅读comp.lang.c FAQ的第6节。 - Keith Thompson
@KeithThompson:“……尽管它们密切相关。”[问题6.2](http://www.c-faq.com/aryptr/aryptr2.html) - Dancrumb
问题6.2非常清楚地表明它们是完全不同的概念。是的,它们密切相关;任何编程语言中都有很多概念是密切相关的。有一种普遍的误解认为C数组实际上是指针;让我们不要加深这种误解。 - Keith Thompson
虽然泛化的很好,但我认为如果使用一个包含两个字符的数组会更好,其中c作为第一个字符,NUL作为第二个字符,以展示如何将char转换为以NUL结尾的字符串...编辑:啊,我看到Daniel刚刚做到了这一点... - Jim Balter

9
使用 & 运算符将为您提供对字符的指针,正如Dancrumb所提到的那样,但是作用域的问题会阻止您返回指针,也正如他所提到的那样。
我必须补充一点的是,我想你想要一个 char* 的原因是为了在 printf 或类似的函数中将其用作字符串。您无法以这种方式使用它,因为该字符串不会以 NULL 结尾。要将 char 转换为字符串,您需要执行类似以下操作:
char c = 'a';
char *ptr = malloc(2*sizeof(char));
ptr[0] = c;
ptr[1] = '\0';

不要忘记稍后释放ptr


1
malloc的参数:sizeof(char)1,你可以只写malloc(2),这等同于。 - Jack
@Jack,你这样做有什么特别的原因吗?不如按照通常的方法使用sizeof吧? - Daniel
当char被规定为一个字节时,将字符数转换为字节数似乎是不必要的冗长。当为foo的副本分配空间时,您会写malloc((strlen(foo)+1)*sizeof(char))吗?无论如何,我更喜欢foo = malloc(n*sizeof *foo),它可以适用于任何类型的foo。 - Jim Balter

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接