嗨,我正在尝试编写一个递归函数来提取字符串的每一行。我不知道为什么它不起作用,我花了 2 个小时试图找到问题。
#include <string.h>
#include <stdlib.h>
#include <stdio.h>
int safe_line(char* input, int end_of_line, int num_of_line, int num_sum_safe)
{
//takes an input, the coordinates of the previous end of the line
//the number of line already treated
//and a num_sum_safe which is not important
char temp_line[24];
int count;
int actual_line;
int temp_num_line;
actual_line = end_of_line;
temp_num_line = num_of_line + 1;
if (num_of_line == 3)
{
return num_sum_safe;
}
count = actual_line;
while (*(input + count) != '\n')
{
*(temp_line + count - actual_line) = *(input + count);
count++;
}
*(temp_line + count - actual_line ) = '\0';
actual_line += count + 1;
printf("%s\n", temp_line);
return safe_line(input, actual_line, temp_num_line, 0);
}
int main()
{
char input[15] = "n\natt\naa\na as";
safe_line(input,0 ,0 ,0 );
}
它在标准输出中返回的值:
n
阿特
期望值应该是这样的:
n
阿特
呐
娜作为
看来问题出在这句话上
actual_line += count + 1;
^^
你只需写
actual_line = count + 1;
^^^
但是函数声明太复杂了。您只能使用指针算术在缓冲区内传递指针,而不是始终传递缓冲区的初始地址和缓冲区中的当前位置。