这可能是一个非常新的问题,但是我可以解决这个问题,以便将任何字符(除了\ r)添加到我的新字符串ucontents中吗?刚才它只添加字符直到\ r \ n。我想在\ r \ n之后添加字符。
void to_unix_line_endings(char* contents, char* ucontents) {
int i;
for (i = 0; i < strlen(contents); i++) {
if(contents[i] != '\r') {
ucontents[i] = contents[i];
}
}
}
char out[5000];
to_unix_line_endings("spaghettiand\rmeatballs", out);
printf("%s\n", out);
// Prints "spaghettiand". I want "spaghettiandmeatballs".
感谢。
答案 0 :(得分:2)
在评论中(在你的回答下),@ BLUEPIXY指出因为j
永远不会等于length
,ucontents
永远不会在{{1}中终止阻止。
因此,尽管您的代码示例(在 answer 部分中)似乎对您有效,但代码最终会失败。 if(j == length)
需要一个空终止符来标识字符串的结尾。当您正在写入的内存中没有恰好位于正确位置的NULL终止符时,它将失败。 (与任何字符串函数一样)。
以下更改将使null终止缓冲区:
printf()
答案 1 :(得分:1)
修正了这样。谢谢,BLUEPIXY。
void to_unix_line_endings(char* contents, char* ucontents) {
int i;
int j = 0;
int length = strlen(contents);
for (i = 0; i < length; i++) {
if(contents[i] != '\r') {
ucontents[j] = contents[i];
if (j == length) {
ucontents[j] = '\0';
break;
}
j++;
}
}
}