13

我有一个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");
}
4

2 回答 2

30

嗯,首先,linechars 的数组,因此可以以与 a 大致相同的方式进行操作char *(有关重要​​差异,请参阅comp.lang.c 常见问题解答),因此您无需担心。

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

&运算符是您所需要的:

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;
于 2012-06-29T20:11:02.033 回答
8

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

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

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

以后别忘了释放ptr

于 2012-06-29T20:18:03.803 回答