Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/60.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 我不能在文件中添加全名,只能添加一个字符,所以如何在文件中添加完整字符串?_C - Fatal编程技术网

C 我不能在文件中添加全名,只能添加一个字符,所以如何在文件中添加完整字符串?

C 我不能在文件中添加全名,只能添加一个字符,所以如何在文件中添加完整字符串?,c,C,我不能说我完全理解你在找什么。 到目前为止,我所理解的是,您正在询问是否可以在一个文件中同时放置多个字符。 我的答案可能是,或者可能是你正在寻找的东西。你似乎对C语法有一些基本的误解,这些误解给你带来了问题,例如 #include <stdio.h> #include <stdlib.h> #include <string.h> char *in() { char *a[100]; scanf("%s",&a); prin

我不能说我完全理解你在找什么。 到目前为止,我所理解的是,您正在询问是否可以在一个文件中同时放置多个字符。
我的答案可能是,或者可能是你正在寻找的东西。

你似乎对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;
}
char*a[100];声明一个“数组或指向字符的指针”,其中100个 它在中声明为本地,因此当函数在返回函数堆栈帧时会被销毁/释放。 您不需要“数组或指向字符的指针”,您需要一个足够大的字符数组来容纳作为输入读取的最长单词,或者您需要分配一个相同大小的内存块,为末尾的nul终止字符提供空间 printf\na:%d,&a尝试使用十进制格式说明符打印指针数组的地址。如果您试图打印指针地址,请使用%p。 但是,如果要打印作为输入读取的当前单词,则需要使用%s打印字符串。 在这两种情况下,您都不会在a之前使用运算符的地址。 您在中声明为类型char*,但随后尝试返回类型char*[100]-您的编译器应该会发出警告和错误读取这些警告和错误,您可以从读取和消除所有警告和错误中学到比其他任何地方都多的C语言 将FILE*fp作为参数传递,并在函数中使用fscanf以允许从任何文件中读取,这将更加有用。只需传递stdin即可从标准输入读取

您还需要传递一个足够大的字符数组以输入。在main中为b提供存储并将其作为参数传递给in,这看起来是您打算做的事情。您还可以使用malloc、calloc或realloc动态分配内存,但是您有责任释放您分配的任何内存。最好只在main中为b创建存储并将其传递给in

综上所述,看起来您的意图类似于以下内容:

char *in()
{
    char *a[100];
    scanf("%s",&a);
    printf("\na : %d",&a);
    return(a);
}
示例使用/输出

注意:在写入“asif.txt”的单词之间没有空格,也没有包含任何“\n”

仔细看看,如果你有任何问题,或者你的意图与我想象的不同,请告诉我


注意:编译时始终启用警告,例如在编译字符串中使用-Wall-Wextra,并且在代码编译时没有警告或错误之前不要接受代码。

请阅读以了解如何格式化您的帖子。但在此之前,你可能应该阅读和阅读。您可能也需要这样做,阅读指针、数组和作用域。在putc旁边,还有一个。为什么在printf中使用&returna;他总是错的。因为它返回一个指向局部函数变量的指针,而该变量在函数退出后无效。此外,char*a[100];应为字符a[100];。将strlenb存储在循环外的变量中。你一次又一次地为每个循环调用它…哦。。。好那是因为。。。好吧,我完全忘记了fprintf的存在。我的错。我相信作者不需要字符串格式。
#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