C 终止满是垃圾的字符串?

C 终止满是垃圾的字符串?,c,C,C是否允许在充满垃圾的读取字节的末尾放置字符串终止符,或者仅当读取字节是字符时才保证 我需要从stdin中读取类似的内容,但我不知道要读取多少字符,并且EOF不保证: Hello World!---full of garbage until 100th byte--- 可以在末尾放置一个终结者,但最终结果可能是Hello World!还有一长串的垃圾 字节总是字符。如果希望只接受结尾垃圾可能包含的可打印字符,那么无论如何,您可以一次读取一个字符的输入,并检查每个字节的值是否在0x20和0x7E

C是否允许在充满垃圾的读取字节的末尾放置字符串终止符,或者仅当读取字节是字符时才保证

我需要从stdin中读取类似的内容,但我不知道要读取多少字符,并且EOF不保证:

Hello World!---full of garbage until 100th byte---

可以在末尾放置一个终结者,但最终结果可能是Hello World!还有一长串的垃圾

字节总是字符。如果希望只接受结尾垃圾可能包含的可打印字符,那么无论如何,您可以一次读取一个字符的输入,并检查每个字节的值是否在0x20和0x7E之间

虽然只能保证使用ASCII字符串…

read返回实际读入缓冲区的字符数,或者由于OP使用POSIX read函数,我猜这个问题应该标记为POSIX/unix或类似的东西,在这种情况下,字节、字符和八位字节是同一事物的假设是完全正确的。顺便说一句,您可以建议在读取数据后验证数据,而不是建议一次读取一个非常慢的字节。
char *var = malloc(100 + 1);

read(0, var, 100); // read from stdin. Unfortunately, I do not know how many bytes to read and stdin is not guaranteed to hold an EOF. (I chose 100 as an educated guess.)

var[100] = '\0'; // Is it possible to place a terminator at the end if most of the read bytes are garbage ?
int n;
char *var = malloc(100 + 1);
n = read(0, var, 100);
if(n >= 0)
   var[n] = '\0';
else
   /* error */