我无法添加文件全名只添加一个字符,所以如何在文件中添加完整的字符串?

时间:2017-04-13 05:44:10

标签: c

#include <stdio.h> 
#include <stdlib.h> 
#include <string.h> 
char *in()
{
    char *a[100];
    scanf("%s",&a);
    printf("\na : %d",&a);
    return(a);
}

int main()
{
    char *b;
    int i,j;
    FILE *fp;
    fp=fopen("asif.txt","w");
    b=in();
    printf("\nb : %d",b);
    for(j=0;j<strlen(b);j++)
    {
        putc(b[j],fp);
    }
    fclose(fp);
    return 0;
}

2 个答案:

答案 0 :(得分:1)

您似乎对C语法有一些基本的误解,这些误解会给您带来问题,例如:

char *in()
{
    char *a[100];
    scanf("%s",&a);
    printf("\na : %d",&a);
    return(a);
}
  • char *a[100];宣布'array or pointers to char'100他们)
  • 它在in内被声明为local,因此当函数in返回时将被销毁(函数stack-frame在那时被销毁/释放)。
  • 您不需要'array or pointers to char',您需要一个足够大的character-array来保持读取的最长字作为输入,或者您需要分配相同大小的内存块(提供最后 nul-terminatedating 字符的空格)
  • printf("\na : %d",&a)尝试使用 decimal 格式说明符打印指针数组的地址。如果您尝试打印指针地址,请使用%p
  • 但是,如果要将当前单词作为输入打印,则需要使用%s来打印字符串。
  • 在任何一种情况下,您都不会在a之前使用运算符的地址。
  • 您将in声明为类型char *,但然后尝试返回类型char *[100] - 您的编译器应该喷出警告和错误(阅读它们,您可以从阅读中学到更多C和消除所有警告和错误,而不是其他任何地方)

使in作为参数传递FILE *fp更有用,并在函数中使用fscanf以允许从任何文件中读取。只需通过stdin即可阅读标准输入

您还需要将足够大小的字符数组传递给in。在b中为main提供存储并将其作为参数传递给in,这就是您打算做的事情。 (您还可以使用inmalloccallocrealloc内动态分配内存,但您有责任free分配任何内存。最好只在b中为main创建存储空间并将其传递给in

将它们放在一起,看起来你想要的东西类似于以下内容:

#include <stdio.h> 

#define MAX 100 /* longest word in the unabridged dictionary is 27-chars */

char *in (FILE *fp, char *a)
{
    if (fscanf (fp, "%99s", a) != EOF) { /* always validate ALL input */
        printf ("a : %s\n", a);
        return(a);
    }
    else
        return NULL;    /* return NULL on EOF to indicate done reading */
}

int main (void)
{
    char b[MAX] = "";   /* declare b with 100 chars and initialize */
    FILE *fp;

    if (!(fp = fopen ("asif.txt","w"))) { /* validate ALL file openingings */
        fprintf (stderr, "error: file open failed 'asif.txt'.\n");
        return 1;
    }

    while (in (stdin, b))       /* for each word in input  */
        fprintf (fp, "%s", b);  /* write it to output file */

    fclose(fp);     /* close file */

    return 0;
}

示例输入

$ cat data.txt
Abbie 3.4 Oakley 3.5 Sylvia 3.6 Uwe 3.7 Ken 3.8 Aaron 3.9 Fabien 4

示例使用/输出

$ ./bin/fprintftofile <dat/data.txt
a : Abbie
a : 3.4
a : Oakley
a : 3.5
a : Sylvia
a : 3.6
a : Uwe
a : 3.7
a : Ken
a : 3.8
a : Aaron
a : 3.9
a : Fabien
a : 4

文件输出

$ cat asif.txt
Abbie3.4Oakley3.5Sylvia3.6Uwe3.7Ken3.8Aaron3.9Fabien4

(注意:您没有在写入'asif.txt'或包含任何'\n' s的字词之间放置任何空格

仔细看看并告诉我您是否有任何问题,或者您的意图与我的意图有所不同。

注意:始终在启用警告的情况下进行编译(例如,在编译字符串中使用-Wall -Wextra),并且在编译时没有警告或错误,不接受代码。

答案 1 :(得分:0)

我不能说我完全明白你在寻找什么。 到目前为止我所理解的是,您在询问是否可以在文件中同时放置多个char。 我对此的回答是fwrite()puts()可能就是你要找的。