我有一段代码出现故障,我不知道它是如何做它正在做的事情。
我想做的是:
path
和文件名filename
caminho
我的问题代码是:
void fileTransfer(const char* filename, const char* path, bool ts)
{
std::cout << filename << std::endl;
char *caminho;
caminho[0] = '\0';
std::cout << "0 " << caminho << ' ' << filename << std::endl;
strcat(caminho, path);
std::cout << "1 " << caminho << ' ' << filename << std::endl;
strcat(caminho, "\\");
std::cout << "2 " << caminho << ' ' << filename << std::endl;
strcat(caminho, filename);
std::cout << "3 " << caminho << ' ' << filename << std::endl;
//does the rest
}
这段代码应该做的是打印这样的东西:
file.txt
0 file.txt
C:\Users\Username file.txt
C:\Users\Username\ file.txt
C:\Users\Username\file.txt file.txt
但是这段代码实际打印的是:
file.txt
0
C:\Users\Username C:\Users\Username
C:\Users\Username\ C:\Users\Username\
C:\Users\Username\C:\Users\Username\C C:\Users\Username\C:\Users\Username\C
在所有strcat
之前,我已经打印filename
并且这是正确的。任何人都可以看到这段代码有什么问题吗?
答案 0 :(得分:4)
caminho
并未指向任何地方。你正在覆盖随机记忆。
为什么你甚至使用C字符串操作?使用std::string
。
答案 1 :(得分:2)
您没有在要复制路径和文件名的位置分配内存。您只定义了一个指针,而且还没有初始化。
正确的功能可能看起来像
void fileTransfer( const char* filename, const char* path, bool ts )
{
size_t n = strlen( path ) + strlen( filename ) + sizeof( "\\" );
// char *caminho = malloc( n * sizeof( char ) ); for C or
char *caminho = new char[ n ];
caminho[0] = '\0';
strcat( caminho, path );
strcat( caminho, "\\" );
strcat( caminho, filename );
//does the rest
}
当不再需要组合字符串时,不要忘记释放已分配的内存:
free( caminho ); // for C
delete [] caminho; // for C++
请注意,当您使用C ++时,可以使用class std :: string。
例如
std::string caminho( path );
caminho += "\\";
caminho += filename;
如果您需要获取字符串,则可以使用成员函数c_str
。例如
caminho.c_str()