我有一个程序,我想从一个字符串中删除空格。我想找到一个优雅的方式来做到这一点,所以我发现下面的(我已经改变了它一点,所以它可能是更好的可读)代码in a forum:C如何知道我的字符串的结尾?
char* line_remove_spaces (char* line)
{
char *non_spaced = line;
int i;
int j = 0;
for (i = 0; i <= strlen(line); i++)
{
if (line[i] != ' ')
{
non_spaced[j] = line[i];
j++;
}
}
return non_spaced;
}
正如你可以看到,该函数采用字符串,并使用相同的分配的内存空间,只选择无间隔字符。有用!
无论如何,根据维基百科,在C的字符串是“Null-terminated string”。我一直认为这样,一切都很好。但问题是:我们把没有“空字符”在non_spaced
字符串的结尾。并以某种方式编译器知道它的最后一个字符用“non_spaced”串改结束。它如何知道?
你是什么意思“编译器知道它”?你在运行时改变它,编译过程是long已过 – Fred 2012-04-27 11:34:46
@Fred - 好点! – 2012-04-27 11:36:14
对于它的价值,'strlen(line)'会重新计算字符串的长度时间。这是一个非平凡的计算,不应该在每个循环迭代中完成。你会更好地计算一次并存储它:'size_t len = strlen(line); for(i = 0; i <= len; i ++)'。 (另外,你所有作为int的变量在技术上应该是'size_t'类型。) – 2012-04-27 11:38:38