C 将字符串传递到函数中
我试图将一个字符串传递到C中的函数中。该字符串将由用户输入,然后传递到函数以写入文本文件。我知道这似乎很基本,但我只是在学习CC 将字符串传递到函数中,c,string,io,C,String,Io,我试图将一个字符串传递到C中的函数中。该字符串将由用户输入,然后传递到函数以写入文本文件。我知道这似乎很基本,但我只是在学习C #include <stdio.h> #include <string.h> void read() { char text[50][30],buffer[150]; int i=0; FILE *file_in; file_in=fopen("test.txt","r");
#include <stdio.h>
#include <string.h>
void read() {
char text[50][30],buffer[150];
int i=0;
FILE *file_in;
file_in=fopen("test.txt","r");
if (file_in == NULL) {
printf("Error opening file\n");
}
while (fgets(buffer,150,file_in)) {
strcpy(text[i],buffer);
printf("line %d: %s\n",i,text[i]);
i++;
}
getchar();
fclose(file_in);
}
void write(char str[])
{
FILE *file_in;
file_in=fopen("test.txt","a");
if (file_in == NULL) {
printf("Error opening file\n");
}
//write to the file
fprintf(file_in, "\n%s", str);
// fputs(str, file_in);
fclose(file_in);
}
int main()
{
read();
char msg[50];
printf("Enter some text: ");
puts(msg);
write(msg);
return 0;
}
#包括
#包括
无效读取(){
字符文本[50][30],缓冲区[150];
int i=0;
文件*FILE_in;
文件_in=fopen(“test.txt”、“r”);
if(file_in==NULL){
printf(“打开文件时出错”);
}
而(fgets(缓冲区,150,文件_in)){
strcpy(文本[i],缓冲区);
printf(“第%d行:%s\n”,i,文本[i]);
i++;
}
getchar();
fclose(文件输入);
}
无效写入(字符str[])
{
文件*FILE_in;
文件_in=fopen(“test.txt”、“a”);
if(file_in==NULL){
printf(“打开文件时出错”);
}
//写入文件
fprintf(文件在“\n%s”,str中);
//FPUT(str,文件中);
fclose(文件输入);
}
int main()
{
read();
半焦味精[50];
printf(“输入一些文本:”);
放(味精);
写(msg);
返回0;
}
它会写入文件,但会写入奇怪的字符,而不是我实际键入的字符。amI做错了什么?首先:不要调用函数
read()
和write()
-选择更具体的函数。系统已将函数名read()
和write()
用于低级文件操作,尝试自己定义它们将导致意外行为
第二:您从不初始化
msg
变量的内容,也不向其中读取任何数据,因此其内容将是随机的。(请记住,put()
打印数据;它不读取任何内容。)看起来您将获取
与放置
混淆了put
将字符串写入控制台<代码>获取从控制台读取字符串。把它们关掉,你的程序就可以运行了
Microsoft的编译器经常警告不要使用不安全或不推荐使用的函数,如get
。您可以改用fgets
,因为它不允许缓冲区溢出
下面是一个例子:
fgets(msg, 50, stdin);
或
当你写
charmsg[50]代码>,它包含不确定的值。它不是零初始化的或任何东西
put(msg)
line将这个垃圾写出来,然后write(msg)代码>将垃圾写入文件
我猜您打算在printf
之后和put
之前输入一些文本代码
注意。在read()
函数(您还没有调用该函数)中,应该使fgets
缓冲区大小与数组的宽度匹配,并且应该检查如果文件有多行,是否没有从数组末尾运行
此外,明智的做法是将函数命名为非read
和write
,因为在POSIX环境中,已经有使用该名称的函数可能发生冲突。以下是解决方案:
#include <stdio.h>
#include <string.h>
int read() {
char text[50][30],buffer[150];
int i=0;
FILE *file_in;
file_in=fopen("test.txt","r");
if (file_in == NULL) {
printf("Error opening file\n");
}
while (fgets(buffer,150,file_in)) {
strcpy(text[i],buffer);
printf("line %d: %s\n",i,text[i]);
i++;
}
// getchar();why you were using this?
fclose(file_in);
// return 0;
}
void write(char str[])
{
FILE *file_in;
file_in=fopen("test.txt","a");
if (file_in == NULL) {
printf("Error opening file\n");
}
//write to the file
fprintf(file_in, "\n%s", str);
// fputs(str, file_in);
fclose(file_in);
}
int main()
{
char msg[50];
read();
printf("Enter some text: ");
// getchar();
gets(msg);//It reads in msg
write(msg);
return 0;
}
#包括
#包括
int read(){
字符文本[50][30],缓冲区[150];
int i=0;
文件*FILE_in;
文件_in=fopen(“test.txt”、“r”);
if(file_in==NULL){
printf(“打开文件时出错”);
}
而(fgets(缓冲区,150,文件_in)){
strcpy(文本[i],缓冲区);
printf(“第%d行:%s\n”,i,文本[i]);
i++;
}
//getchar();为什么要使用此选项?
fclose(文件输入);
//返回0;
}
无效写入(字符str[])
{
文件*FILE_in;
文件_in=fopen(“test.txt”、“a”);
if(file_in==NULL){
printf(“打开文件时出错”);
}
//写入文件
fprintf(文件在“\n%s”,str中);
//FPUT(str,文件中);
fclose(文件输入);
}
int main()
{
半焦味精[50];
read();
printf(“输入一些文本:”);
//getchar();
获取(msg);//它读取msg
写(msg);
返回0;
}
它写了什么?类似0x049569的东西…?我写的东西像一个盒子,里面有很多字符。请在你的问题中发布它打印的内容。你从不在msg
中存储值,因此它包含垃圾。我试图将输出粘贴到这里,但粘贴时它实际上不会显示在这里。当我在vim编辑器上查看该文件时,它显示为^A。当我在gedt上打开它时,它显示为垃圾。你只是建议某人使用gets
?我厌倦了使用gets。它工作了,但它说它不推荐使用。有更好的方法吗?@TaylorFlores:不适合文本输入fread
将读取指定数量的字节,这意味着它不会在行尾停止(键入Enter时)。使用fgets
@flaco我将我的建议更改为fgets
感谢您的解决方案您的欢迎..我没有提供更改。你应该浏览其他答案,不要使用gets-use fgets,而应该使用fgets-use fgets。这个答案的投票人应该留下一个理由。i、 e.poster对SO来说相当陌生,请告诉他如何改进答案。@jahan-关于您的评论//getchar();你为什么用这个?。在控制台应用程序中,getchar()
是一种暂停执行的好方法,这样您可以在执行崩溃控制台之前看到printf()
的输出。@ryker谢谢您告诉我这一点。你知道有些人沉迷于投票。
#include <stdio.h>
#include <string.h>
int read() {
char text[50][30],buffer[150];
int i=0;
FILE *file_in;
file_in=fopen("test.txt","r");
if (file_in == NULL) {
printf("Error opening file\n");
}
while (fgets(buffer,150,file_in)) {
strcpy(text[i],buffer);
printf("line %d: %s\n",i,text[i]);
i++;
}
// getchar();why you were using this?
fclose(file_in);
// return 0;
}
void write(char str[])
{
FILE *file_in;
file_in=fopen("test.txt","a");
if (file_in == NULL) {
printf("Error opening file\n");
}
//write to the file
fprintf(file_in, "\n%s", str);
// fputs(str, file_in);
fclose(file_in);
}
int main()
{
char msg[50];
read();
printf("Enter some text: ");
// getchar();
gets(msg);//It reads in msg
write(msg);
return 0;
}