【发布时间】:2017-09-09 13:04:11
【问题描述】:
假设我有一个名为 "____.srt" 的文件,其中 ___ 可以是任何东西。 我正在尝试通过添加 '1' 来更改它的名称,所以它看起来像这样“____1.srt”。
使用 CMD argv[1] 从参数中读取文件。
void main(int argc,char* argv[]){
char* pt;
pt = strstr(argv[1],".srt\0"); // checks if end of input-string is .srt
if( pt == NULL)
{
fprintf(stdout,"Invalid input.\nInput file must be inputfile.srt\n");
fprintf(stdout,"Program will now exit\n");
return;
}
strcpy(pt,'1');
strcat(argv[1],".srt");
fprintf(stdout,"%s file was created.\n",argv[1]); }
这似乎不起作用。有人能找出问题所在吗?我会很感激任何帮助。 谢谢
【问题讨论】:
-
我不太了解
c,但是,您不应该在strstr(argv[1],".srt\0")之前检查argc的值吗? -
您没有说明“它似乎不起作用”。您正在打印出新的文件名,但实际上并未重命名文件(甚至首先检查它是否存在)。此外,在文字字符串中包含
\0是没有意义的。 -
@Klitos 我正在检查文件是否存在。我没有提到它,因为它不是重点。如果我不放 \0,我还要如何检查字符串是否以“.srt”结尾?
-
见stackoverflow.com/questions/10347689/…。 C 库中没有办法直接匹配字符串的结尾。字符串文字中的“\0”被视为字符串“.srt”的结尾。函数 strstr 不可能区分“.str\0”和“.srt”。
-
从重命名操作中捕获任何错误代码也是一个不错的策略,例如函数返回代码和 errno。这些代码至少会告诉您呼叫失败的原因。如果您想从 system() 调用中查看错误文本,请改用 popen()。