gpt4 book ai didi

c - 在 C 中的 '\0' 字符后打印新行

转载 作者:行者123 更新时间:2023-11-30 20:24:35 26 4
gpt4 key购买 nike

我目前正在做一项作业,我们要重新创建 cat 命令的三个开关 -n/-T/-E。我们要编译并输入两个参数:开关和文件名。我将文本文件内容存储到缓冲区中。

int main(int argc, char *argv[]){

int index = 0;
int number = 1;
int fd, n, e, t;
n = e = t = 0;
char command[5];

char buffer[BUFFERSIZE];

strcpy(command, argv[1]);
fd = open(argv[2], O_RDONLY);
if( fd == -1)
{
perror(argv[2]);
exit(1);
}

read(fd, buffer,BUFFERSIZE);

if( !strcmp("cat", command)){
printf("%s\n", buffer);
}
else if( !strcmp("-n", command)){
n = 1;
}
else if( !strcmp("-E", command)){
e = 1;
}
else if( !strcmp("-T", command)){
t = 1;
}
else if( !strcmp("-nE", command) || !strcmp("-En", command)){
n = e = 1;
}
else if( !strcmp("-nT", command) || !strcmp("-Tn", command)){
n = t = 1;
}
else if( !strcmp("-ET", command) || !strcmp("-TE", command)){
t = e = 1;
}
else if( !strcmp("-nET", command) || !strcmp("-nTE", command) ||
!strcmp("-TnE", command) || !strcmp("-EnT", command) ||
!strcmp("-ETn", command) || !strcmp("-TEn", command)){
n = e = t = 1;
}
else{
printf("Invalid Switch Entry");
}

if(n){
printf("%d ", number++);
}

while(buffer[index++] != '\0' && ( n || e || t)){
if(buffer[index] == '\n' && e && n){
printf("$\n%d ", number++);
}
else if(buffer[index] == '\n' && e){
printf("$\n");
}
else if(buffer[index] == '\t' && t){
printf("^I");
}
else if(buffer[index] == '\n' && n){
printf("\n%d ", number++);
}
else {
printf("%c", buffer[index]);
}
}
printf("\n");
close(fd);
return 0;

}

除了当我尝试使用 -n 命令时,一切都很完美。它添加了额外的新行。我使用的文本文件具有

hello

hello

hello world!

而不是

1 hello

2 hello

3 hello world!

它将打印出以下内容:

1 hello

2 hello

3 hello world!

4

出于某种原因,它在世界后面添加了额外的行!

Am I missing something simple?

最佳答案

这可能无法解决您的问题,但我没有看到任何代码将终止空字符放入缓冲区中。尝试:

// Reserve one character for the null terminator.
ssize_t n = read(fd, buffer, BUFFERSIZE-1);
if ( n == -1 )
{
// Deal with error.
printf("Unable to read the contents of the file.\n");
exit(1); //???
}

buffer[n] = '\0';

关于c - 在 C 中的 '\0' 字符后打印新行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33140756/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com