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