Code:
while ( fgets(line, 100, file) !=NULL )
{
char path[100];
int i =1;
strcat(path, cwd);
strcat(path, "/");
strcat(path, line);
printf("path is: %s", path);
i++;
printf("i is: %d\n", i);
}
Input File:
Code:
hello
this
is
a
test
Output:
Code:
babaliaris@babaliaris-desktop:~/dev/programming/c/test$ ./Main
path is: /home/babaliaris/dev/programming/c/test/hello
i is: 2
path is: /home/babaliaris/dev/programming/c/test/hello
/home/babaliaris/dev/programming/c/test/this
i is: 2
path is: /home/babaliaris/dev/programming/c/test/hello
/home/babaliaris/dev/programming/c/test/this
/home/babaliaris/dev/programming/c/test/is
i is: 2
path is: /home/babaliaris/dev/programming/c/test/hello
/home/babaliaris/dev/programming/c/test/this
/home/babaliaris/dev/programming/c/test/is
/home/babaliaris/dev/programming/c/test/a
i is: 2
path is: /home/babaliaris/dev/programming/c/test/hello
/home/babaliaris/dev/programming/c/test/this
/home/babaliaris/dev/programming/c/test/is
/home/babaliaris/dev/programming/c/test/a
/home/babaliaris/dev/programming/c/test/testi is: 2
*** stack smashing detected ***: <unknown> terminated
Aborted (core dumped)
Expected Output:
Code:
babaliaris@babaliaris-desktop:~/dev/programming/c/test$ ./Main
path is: /home/babaliaris/dev/programming/c/test/hello
path is: /home/babaliaris/dev/programming/c/test/this
path is: /home/babaliaris/dev/programming/c/test/is
path is: /home/babaliaris/dev/programming/c/test/a
path is: /home/babaliaris/dev/programming/c/test/testbabaliaris@babaliaris-desktop:~/dev/programming/c/test$
The expected output works if i change the loop like this:
Code:
while ( fgets(line, 100, file) !=NULL )
{
char path[100];
path[0] ='\0';
strcat(path, cwd);
strcat(path, "/");
strcat(path, line);
printf("path is: %s", path);
}
As you can see int i is recreated for each iteration but char path[100] is getting appended each iteration like it's a variable outside of the while loop scope.
Why is that?