C++:无法从'char*'转换为'char []'问题

ava*_*var 1 c++

我不是ac/c +程序员(我知道delphi),无论如何我试图编译用c ++编写的程序,我改变它接受一些参数(一个文件的路径,在原始代码中硬编码)来自命令线,原点线是

char Filepath[50] = "F:\\mylib\\*.mp3";
Run Code Online (Sandbox Code Playgroud)

我把它改成了

char Filepath[50] = argv[1]; 
Run Code Online (Sandbox Code Playgroud)

但我得到"无法从'char*'转换为'char []'"错误,主要功能就像

int _tmain(int argc, TCHAR* argv[], TCHAR* envp[])
Run Code Online (Sandbox Code Playgroud)

我该怎么办??即时通讯使用MSVC6.

谢谢

Gre*_*ill 6

使用:

char *Filepath = argv[1];
Run Code Online (Sandbox Code Playgroud)

argv[1]已经包含所需的字符串时,不需要为50个字符分配空间.此外,您无需确定命令行参数中的最大字符数; 该空间已经为您分配.

但请注意,上述内容不会复制字符串,因此如果您打算修改字符串(可能通过附加扩展名或任何内容),那么您将不得不使用strcpy()或类似的解决方案.处理C中的字符串比Delphi中的手动字符复制工作要多得多.

  • 如果strcpy()工作,并且您将命令行参数复制到50字节缓冲区中,则会发生缓冲区溢出等待.确保检查字符串的长度,如果太长则检查失败,或使用strdup()之类的函数. (4认同)

And*_*rsK 6

char Filepath[50] = argv[1];
Run Code Online (Sandbox Code Playgroud)

要复制上面示例中的字符串,您需要使用strcpy(或其任何变体)

另一种(更好的)方法是使用C++字符串

std::string Filepath = argv[1];
Run Code Online (Sandbox Code Playgroud)

这也会复制字符串.

  • 因为当然不会有std :: string溢出. (2认同)