C处理可变长度字符串

时间:2018-10-25 12:42:56

标签: c arrays string

我是C语言的新手,正在上大学。 在执行的一项任务中,我处理字符串。我接受用户输入的字符串或从文件中解析的字符串,然后对它们使用函数来产生答案(如果存在特定质量的话)。

该字符串可以是可变长度,但是可以假定最大长度为80个字符。

我使用

创建了程序
char s[81];

,然后每次都使用不同的字符串填充相同的数组。 由于字符串必须以空字符结尾,因此我在索引80处添加了一个'\ 0';

s[80] = '\0';

但是随后我出现了各种奇怪的行为-输入的字符串末尾有无关的字符。我认为这是因为在'real'字符的末尾和'\ 0'字符的末尾有空格(用垃圾填满了?)。

所以我要做的就是创建一个函数:

void clean_string(char s[], int string_size) {
    int index = 0;
    while(index < string_size) {
        s[index++] = '\0';
    }
}

我所说的干净,只是用零个字符填充字符串。每当处理完一个字符串并准备接受一个新字符串时,我都会执行此操作。然后,我逐个字符地再次填充字符串,并且无论何时停止,接下来的字符肯定都是'\ 0'。 为了在代码中不包含任何幻数(每次我调用clean_string时为81),我使用了以下内容:

#define STRING_LENGTH 81

对我有用。字符串没有显示任何奇怪的行为。但是我想知道这是否被视为不良做法。这种方法有问题吗? 只是强调,我并不是在任务本身寻求帮助,而是有关如何更好地处理此类情况的提示。

1 个答案:

答案 0 :(得分:3)

与其在整个数组中填充零,还不如在读取所有相关字符后仅添加一个零就可以了。

例如:

char s[STRING_LENGTH];
int c;
int idx = 0;

while (((c = getchar()) != '\n') && (idx < STRING_LENGTH - 1) && (c != EOF)) {
    s[idx++] = c;
}
s[idx] = 0;