我是C的新手,我试图在程序运行之前定义输出文件名。我收到一个总线错误 这是我的代码:
#include <stdio.h>
int main (int argc, const char * argv[]) {
char fname[128];
printf("Enter the file name\n");
scanf("%123s",fname);
strcat("/Users/user/Desktop/learn/", fname);
strcat(fname, ".txt");
FILE *fp;
fp=fopen(fname,"a");
fprintf(fp, "Testing... OK I think it worked\n");
return 0;
}
答案 0 :(得分:3)
#include <string.h>
没有strcat
。strcat
的第一个参数必须是指针,而不是字符串文字。strcat
本身并不安全,请改用strncat
。scanf
和fopen
。fp
。main
的签名应为int main(int argc, char * argv[])
。通常不建议使用scanf
,请使用fscanf
&amp;而是sscanf
。
答案 1 :(得分:1)
在第一次调用strcat时,您使用字符串文字作为目标指针。因此,您使用fname将“/ Users / user / Desktop / learn /”连接起来,并将结果存储在“/ Users / user / Desktop / learn /”存储的位置,甚至可能无法写入。
答案 2 :(得分:0)
这不是strcat()
的工作方式。
我看到两种方法:
正确使用fname
,并输入文件名:
char fname[128];
strcpy(fname, "/Users/user/Desktop/learn/"); // ok as long as you don't make the 128 too small
char * input = fname + strlen(fname); // now points after the final /
printf("Enter the file name\n");
scanf("%123s", input); // the 123 is probably not correct
strncat(fname, ".txt", sizeof fname);
并使用它。
目前,这种方法仍然受到以下事实的影响:输入限制为123字节,这可能太大,所以最好暂时忘记它。这只是为了获得这个想法。
也许fgets()
可能更好:
fgets(input, sizeof(fname)-strlen(fname), stdin);
使用命令行参数,这是我最喜欢的方法:
// first check if argc is >= 2, i. e. if the caller has supplied an argument
char fname[128];
strcpy(fname, "/Users/user/Desktop/learn/");
strncat(fname, argv[1], sizeof fname);
strncat(fname, ".txt", sizeof fname);
答案 3 :(得分:0)
试试这个,这对我有用..
http://cboard.cprogramming.com/c-programming/124576-whats-mean-char*-const*-argv.html
#include <stdio.h>
#include <string.h>
int main (int argc, const char*const* argv[])
{
char fname[128];
char path[] = "/home/abc/test/";
printf("Enter the file name\n");
scanf("%123s",fname);
strcat(fname,".txt");
strcat(path,fname);
FILE *fp;
fp=fopen(path,"a");
fprintf(fp, "Testing... OK I think it worked\n");
fclose(fp);
return 0;
}
答案 4 :(得分:-1)
感谢大家的评论。这是工作代码:
#include <stdio.h>
#include <string.h>
int main (int argc, const char*const* argv[])
{
char fname[128];
strcpy(fname, "/Users/user/Desktop/learn/");
char * input = fname + strlen(fname);
printf("Enter the file name\n");
scanf("%s", input);
strncat(fname, ".txt", sizeof fname);
printf("The output pathway and file will be called %s\n", fname);
FILE *fp;
fp=fopen(fname,"a");
fprintf(fp, "Testing... OK I think it worked\n");
fclose(fp);
return 0;
}