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