C将char转换为char *

时间:2012-06-29 20:06:36

标签: c char type-conversion

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

2 个答案:

答案 0 :(得分:19)

嗯,首先,line是一个char的数组,因此可以像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;

答案 1 :(得分:5)

使用&运算符会给你一个指向角色的指针,正如Dancrumb所说,但是存在范围问题阻止你返回指针,正如他所提到的那样。

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

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

不要忘记稍后免费ptr