在 C 中附加带有 null 终止符的 char

avc*_*Jav 4 c arrays null append char

也许是一件微不足道的事情,但我刚刚学习 C,我讨厌用两行代码来做,用一行代码可以做什么(当然,只要它不混淆代码)。

无论如何,我通过一次附加一个字符来构建字符串。我通过跟踪正在构建的字符串的字符索引以及输入文件字符串的(行)索引来做到这一点。

str[strIndex] = inStr[index];
str[strIndex + 1] = '\0';
Run Code Online (Sandbox Code Playgroud)

str 用于临时存储输入行中的单词之一。每次添加字符时我都需要附加终止符。

我猜我想知道什么;有没有一种方法可以将这些组合在一个语句中,而不使用 strcat() (或每次开始一个新单词时使用 memset() 清除 str)或创建其他变量?

Sha*_*ger 7

简单的解决方案:在向字符串添加任何内容之前将其清零。sNUL已经提前到达每个位置。

// On the stack:
char str[STRLEN] = {0};

// On the heap
char *str = calloc(STRLEN, sizeof(*str));
Run Code Online (Sandbox Code Playgroud)

在这种calloc情况下,对于大量分配,您甚至不需要显式将内存清零的成本(在批量分配模式下,它直接从操作系统请求内存,操作系统要么是惰性清零(Linux),要么是后台清零) -ed 在你提出要求之前(Windows))。

显然,您可以通过推迟字符串的终止直到完成构建它来避免如此大量的工作NUL,但如果您可能需要随时将其用作 C 样式字符串,请确保它始终预先NUL终止并非没有道理。