我正在努力阅读文件并删除行中的一些字符,我可以删除任何字符,但char *包含许多未知的东西。
这是在我的文件中。只是一行
localpath=/home/ubu/myDocs
在我的代码中
#include <stdio.h>
#include <strings.h>
char *path;
int main()
{
static const char filename[] = "pathFile";
FILE *file = fopen ( filename, "r" );
if ( file != NULL )
{
char line[512];
while ( fgets ( line, sizeof line, file ) != NULL ) // read a line
{
fputs ( line, stdout ); // write the line
path = strchr(line,'=') +1 ;
}
fclose ( file );
}
else
{
perror ( filename ); // why didn't the file open?
}
}
但问题是我无法使用路径,例如chdir(路径);不管用, 但如果我使用这个strcpy(路径,&#34; / home / ubu / myDocs&#34;);我可以用它,
所以我想知道我打印这样的字符
for(i = 0,i&lt; 200; i ++) 的printf(路径[I]);
在第一种情况下,我在输出中得到了一些奇怪的字符(&#34; / home / ubu / myDocs&#34;),但在第二种情况下我没有得到那种东西而且它效果很好。我无法理解该做什么,我在互联网上遵循了很多方法,但同样的事情发生了,请解释我发生了什么并给我一些解决方案
P.S 我发现在第一种情况下,chdir返回值是&lt; 0,那意味着路径错了没有,,,但它包含路径和无用的东西
感谢
答案 0 :(得分:1)
您可以准确添加您在printf()
中看到的输出吗?
我最好的猜测是fgets()
只包含额外的字符。当您执行fgets()
并传入sizeof line
时,它最多会读取512个字符,但会在换行符\n
或EOF(或者其他字符,如回车符, \r
)。特别是,如果您的文件中有换行符,则会在fgets()
中复制该换行符。尝试删除文件路径末尾的任何多余字符。
修改所以你有两个不同的问题。首先是打印path
时看到垃圾的原因。嗯......那是因为你打印了200个字符。你想要其他〜190个角色是什么?我不知道为什么你在使用strcpy()
时看不到垃圾,但你还没有真正显示你做了什么。第二个问题是@WhozCraig指出的问题。 line
块结束时,if
超出了范围。如果您在该点之后在路径上调用chdir()
,则path
指向垃圾。