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