使用C中的用户定义名称编写输出文件

时间:2013-04-18 21:29:46

标签: c

我是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;
}

5 个答案:

答案 0 :(得分:3)

  1. #include <string.h>没有strcat
  2. strcat的第一个参数必须是指针,而不是字符串文字。
  3. strcat本身并不安全,请改用strncat
  4. 请勿忘记查看scanffopen
  5. 的结果
  6. 当你完成它时关闭fp
  7. main的签名应为int main(int argc, char * argv[])
  8. 通常不建议使用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;
}