2017-10-16 17 views
-3

我想创建一些文件,其中我定义的文件名的第一部分,然后使用用户输入的字符串第二部分。 因此,如果用户将在“文件名”,我想创造1TEMPfilename,1FLUXfilename,1PRESSUREfilename需要采取用户输入的字符串,并创建几个文件与用户字符串作为他们的一部分

至今:

main() 
{ 

    char filename[64]; 

    printf("Enter the Runfile ID (e.g. jul0476.a\n"); 

    fgets(filename,50,stdin); 

    //create new files 

    FILE *fp; 

    fp = fopen('1FINALTEMP'filename,"w"); 

} 

这会产生一个错误,就如何做到这一点任何想法?

+0

请显示您收到的错误消息。 – mkrieger1

+2

你的问题是 - 我如何连接c中的字符串。使用snprintf – pm100

+0

错误是:警告:多字符字符常量[-Wmultichar] fp = fopen('1FINALTEMP'文件名,“w”); ^ 警告:字符常量对于其类型太长 错误:预计')' fp = fopen('1FINALTEMP'文件名,“w”); ^ 注意:要匹配这个'(' fp = fopen('1FINALTEMP'文件名,“w”); – clairegetz

回答

0

不要忘记fgets()也会在尾部换行符(\n)中读取。你可能想要删除它。

fgets(filename,50,stdin); 
filename[strlen(filename)-1]='\0'; 

然后制作新的文件名。

char names[3][60]; 
sprintf(names[0], "1TEMP%s", filename); 
sprintf(names[1], "1FLUX%s", filename); 
sprintf(names[2], "1PRESSURE%s", filename); 

然后用这些字符串作为参数传递给fopen()

fopen(names[0], "w"); 

,并检查是否成功具有一起来看看它的返回值fopen()。如果它是NULL,则发生了一些错误。

至于fp = fopen('1FINALTEMP'filename,"w");给出错误,'1FINALTEMP'是一个字符串,而不是字符文字。单引号是字符文字。见here

并且只有相邻的字符串文字按照提到的here连接。

Adjacent string literal tokens are concatenated.

printf("%s", "hello " "world");"hello " "world"将成为"hello world"

但这只适用于字符串文字。

编辑:snprintf()优于sprintf(),因为如果要写入的字符串太大而无法存储在发生写入的字符串中,后者可能会写入越界。使用snprintf(),您可以指定要写入的字节数。

char name[60]; 
snprintf(names, 60, "1TEMP%s", filename); 
+1

这固定了一切!非常感谢 – clairegetz

-1

尝试采取一个字符串变量从与fgets其中储存的文件名,然后用“+”并连接你提供什么(1Finaltemp),然后将它传递文件指针像FP = FOPEN(myNewFile,W)

+0

你不能在[tag:C]中用'+'连接字符串。 –

+0

对不起,我忘了那是为了java。感谢您指出 –

相关问题