所以我试图从文件中读取单词。但是,我必须使用putchar(ch)
,其中ch
是int
。如何将ch转换为字符串(char *),以便将其存储在char *变量中并将其传递给另一个以char *作为参数的函数。而我实际上只想存储但不打印它。
这就是我所拥有的:
int main (void)
{
static const char filename[] = "file.txt";
FILE *file = fopen(filename, "r");
if ( file != NULL )
{
int ch, word = 0;
while ( (ch = fgetc(file)) != EOF )
{
if ( isspace(ch) || ispunct(ch) )
{
if ( word )
{
word = 0;
putchar('\n');
}
}
else
{
word = 1;
putchar(ch);
}
}
fclose(file);
}
return 0;
}
答案 0 :(得分:3)
sprintf(char_arr, "%d", an_integer);
这使char_arr
等于an_integer
的字符串表示
(如果您想知道,这不会打印出控制台输出的任何内容,这只是“存储它”)
一个例子:
char char_arr [100];
int num = 42;
sprintf(char_arr, "%d", num);
char_arr
现在是字符串"42"
。 sprintf
会自动将空字符\0
添加到char_arr
。
如果你想在char_arr的末尾附加更多内容,你可以这样做:
sprintf(char_arr+strlen(char_arr), "%d", another_num);
' + strlen'部分是这样,它开始追加到最后。
答案 1 :(得分:1)
因此,您有char
类型的单个值,即int8_t
(或某些系统上的uint8_t
)。您已将其存储在int
中,因此fgetc
可以返回-1
以查找错误,但仍可以返回任何8位字符。
单个字符只是8位整数,您可以存储在任何大小的整数变量中而不会出现问题。将它们放在一个末尾带有零字节的数组中,你就有了一个字符串。
char buffer[10] = {0};
int c = 'H';
buffer[0] = c;
// now buffer holds the null-terminated string "H"
buffer[1] = 'e';
buffer[2] = 'l'; // you can see where this is going.
c = buffer[1]; // c = 'e' = 101
// (assuming you compile this on a system that uses ASCII / unicode, not EBCDIC or some other dead character mapping).
请注意,字符串终止的零字节进入缓冲区,因为我初始化它。使用数组初始值设定项会将您在初始化列表中未提及的任何元素归零。
答案 2 :(得分:1)
为了将单个字符表示为字符串,我发现使用简单的2字符缓冲区就像其他任何东西一样简单。您可以利用取消引用字符串指向第一个字符的事实,并简单地将您希望表示的字符指定为字符串。如果您在声明时已将2-char缓冲区初始化为0
(或'\0'
),则表明您的字符串始终为null-terminated
:
简短示例
#include <stdio.h>
int main (void) {
int ch;
char s[2] = {0};
FILE *file = stdin;
while ( (ch = fgetc(file)) != EOF ) {
*s = ch;
printf ("ch as char*: %s\n", s);
}
return 0;
}
使用/输出强>
$ printf "hello\n" | ./bin/i2s2
ch as char*: h
ch as char*: e
ch as char*: l
ch as char*: l
ch as char*: o
ch as char*:
注意:您可以将&& ch != '\n'
添加到while条件中,以防止打印换行符。
答案 3 :(得分:1)
您可以使用数学函数来做到这一点。像这样:
#include <stdio.h> // For the sprintf function
#include <stdlib.h> // for the malloc function
#include <math.h> // for the floor, log10 and abs functions
const char * inttostr(int n) {
char * result;
if (n >= 0)
result = malloc(floor(log10(n)) + 2);
else
result = malloc(floor(log10(n)) + 3);
sprintf(result, "%d", n);
return result;
}