gpt4 book ai didi

c - 我在尝试用空格替换输入字符串中的制表符时遇到段错误

转载 作者:行者123 更新时间:2023-11-30 20:29:01 25 4
gpt4 key购买 nike

我在学习C语言时遇到了一些分段问题,我的目标是将程序中的制表符与空格交换:

我使用了 get_line 模板并修改了代码以适应情况。这是整个编码解决方案:

#include <stdio.h>

#define MAXLINE 1000

char line[MAXLINE];
char detabline[MAXLINE];

int get_line(void);

int main(void){
int len;
int i;
int nt = 0;

extern char detabline[];
extern char line[];

while ((len = get_line()) > 0){
for (i = 0; i < len; ++i){
if (line[i] == '\t'){
printf("%s", " ");
}
else{
printf("%s", line[i]);
}
}
}

return 0;

}

int get_line(void){
int c, i, nt;

nt = 0;

extern char line[];

for (i = 0; i < (MAXLINE - 1) && (c = getchar()) != EOF && ((c != '\t') || (c != '\n')); ++i){
line[i] = c;
}

if (c == '\n'){
line[i] = c;
++i;
}
else if (c == '\t'){
++nt;
}

line[i] = '\0';

return i;
}

问题在于找出哪些内存分配不正确。顺便说一句,我的解决方案中可能有一些冗余代码。

最佳答案

关于:

for (i = 0; i < (MAXLINE - 1) && (c = getchar()) != EOF && ((c != '\t') || (c != '\n')); ++i){

这个表达式:

(c != '\t')

将导致 line[] 数组中不再存在制表符。

这个表达式:

(c != '\n')

将导致 line[] 数组中不再有换行符序列。

然后,由于这些表达式,当遇到制表符或换行符时,line[] 数组将不会被更新(永远),因为这些表达式会导致提前退出 for() 循环

以下建议代码:

  1. 干净地编译
  2. 执行所需的功能

现在,建议的代码:

#include <stdio.h>

#define MAXLINE 1000

char line[MAXLINE];

int main(void)
{
int i = 0;

int ch;
while ( i< MAXLINE-1 && (ch = getchar()) != EOF && ch != '\n' )
{
if ( ch == '\t')
{
line[i] = ' ';
}

else
{
line[i] = (char)ch;
}
i++;
}

printf( "%s\n", line );
}

如果您想了解有关拟议代码的更多详细信息,请发表评论。

关于c - 我在尝试用空格替换输入字符串中的制表符时遇到段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59462328/

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