int main(int argc,const char* argv[]) { char buff[20]; int len; len= fread(buff,1,strlen(buff),stdin); printf("%ld\r\n",strlen(buff)); fwrite(buff,1,len,stdout); return 0; } ~ 我使用这段代码去打印出来我写上去的字符串 可以我输入一个hello world 只有h打印出来 怎么回事
时间: 2023-11-30 10:02:47 浏览: 166
这是因为你在读取用户输入之前没有对`buff`进行初始化,所以`buff`中的内容是不确定的。你需要在读取用户输入之前,先将`buff`中的内容清空,可以使用下面这行代码:
```
memset(buff, 0, sizeof(buff));
```
另外,你在调用`fread`时,第三个参数应该是`sizeof(buff)`,而不是`strlen(buff)`。因为`strlen(buff)`表示的是`buff`中的字符串长度,而不是`buff`的大小。应该这样写:
```
len = fread(buff, 1, sizeof(buff), stdin);
```
修改后的完整代码如下:
```
#include <stdio.h>
#include <string.h>
int main(int argc, const char* argv[]) {
char buff[20];
int len;
memset(buff, 0, sizeof(buff));
len = fread(buff, 1, sizeof(buff), stdin);
printf("%d\r\n",len);
fwrite(buff, 1, len, stdout);
return 0;
}
```
相关问题
int __cdecl main(int argc, const char **argv, const char **envp) { int result; // eax char Buffer[1024]; // [esp+0h] [ebp-408h] BYREF FILE *Stream; // [esp+400h] [ebp-8h] int v6; // [esp+404h] [ebp-4h] v6 = 0; Stream = fopen(aPasswordTxt, Mode); if ( !Stream ) exit(0); fread(Buffer, 1u, 0x20u, Stream); v6 = sub_401000(Buffer); __asm { jmp esp } return result; }
这段代码是用 C 语言编写的一个简单的程序,它的作用是从一个名为 "Password.txt" 的文件中读取前 0x20 个字节的数据,将这些数据作为参数传递给 sub_401000 函数,并执行该函数。最后,程序使用 __asm { jmp esp } 指令进行跳转,跳转到栈顶处执行。这个程序的具体功能很难确定,因为我们无法看到 sub_401000 函数的实现细节。
int main(int argc ,const char* argv[]) { FILE* fp; int buff[1024]; int len; unsigned int cnt = 0; fopen(argv[1],"r+"); while(!feof(fp)) { len = fread (buff,1,1024,fp); cnt += len; fprintf(stdout,"这个文件共有%d字节",len); memset(buff,0,1024); } fprintf(stdout,"这个文件共有%d字节",len); fclose(fp); return 0; }我用这段代码尝试去读出一个文件的大小,但是他为什么会报Segmentation fault (core dumped)的错误
这段代码中出现了几个问题:
1. `fopen`函数没有进行错误检查,可能导致文件打开失败而出现错误
2. `fp`指针没有被赋值,导致在读取文件时出现错误
3. 在循环中,应该累加所有读取的字节数,而不是每次只输出当前读取的字节数
4. 最后一次读取的字节数可能小于1024,应该在循环结束后输出累加的所有字节数
5. `memset`函数的作用不清楚,可能会导致数据被清空而出现错误
下面是修改后的代码:
```
#include <stdio.h>
int main(int argc, char* argv[]) {
FILE* fp;
int buff[1024];
int len;
unsigned int cnt = 0;
fp = fopen(argv[1], "r");
if (fp == NULL) {
fprintf(stderr, "无法打开文件\n");
return 1;
}
while (!feof(fp)) {
len = fread(buff, 1, 1024, fp);
if (len == 0) {
break;
}
cnt += len;
}
fprintf(stdout, "这个文件共有%d字节\n", cnt);
fclose(fp);
return 0;
}
```
修改后的代码中,我们首先对`fopen`函数的返回值进行了错误检查。在循环中,我们累加所有读取的字节数,并且添加了一个判断,以防止最后一次读取的字节数小于1024。最后,我们在循环结束后输出累加的所有字节数。
阅读全文