我正在尝试编写一些读取文件并忽略换行符的代码(\n),到目前为止我有:
c = fgetc(fp);
for(int loop = 0; c != EOF; loop++)
{
if((c != '\n') && (c != '\\'))
{
buffer[loop] = c;
}
c = fgetc(fp);
}
Run Code Online (Sandbox Code Playgroud)
但它似乎并没有忽略'\n'位(不确定'\')
对不起代码的布局,该网站似乎不喜欢我的Opera版本:(
编辑:谢谢大家,我已经编了大约6个小时的编码,完全忽略了增量,这就是为什么我认为\n仍然是静止的.
我也不知道\ r,uning Linux但是试图制作跨平台,所以这很有用.
我正在尝试编译一个未指定的软件,我在标准标题中遇到错误,例如stdio.h.错误主要是未声明的标识符,例如_In_.IntelliSense发现它们的定义很好.我应该在哪个方向找出原因?
补充:例如,在一个cpp文件stdio.h中包含第一个文件 - 我之前没有可以看到的定义.没有使用预编译的头文件.我安装的其他内容编译得很好.
我遇到的问题是使用标准输入从文件中读取多行整数.文件看起来像:
123
423
235
523
..etc
Run Code Online (Sandbox Code Playgroud)
我目前的代码是:
/*
* Read in the initial puzzle configuration.
* Each line is 4 characters long:
* Row as a character '0' .. '9'
* Column as character '0' .. '9'
* Digit as character '0' .. '9'
* Terminating newline.
* Exits with an error message if there are syntactic
* or semantic errors with any configuration line.
*/
void configure(FILE *puzzle_file) {
int row;
int column;
int value;
while((fscanf(puzzle_file, "%i%i%i\n", row, column, …Run Code Online (Sandbox Code Playgroud) 我想在驱动程序代码(DDK)中使用"printf",因此我已经包含了stdio.h.但是编译器说:
error LNK2001: unresolved external symbol __imp__printf
Run Code Online (Sandbox Code Playgroud)
有任何想法吗?我在某个地方看到这是不可能的 - 但那太糟糕了 - 我无法相信.为什么我不能在内核代码中使用标准C例程?
我正在写一个游戏,现在我能够通过类及其方法实现文件系统sqlite.为了让生活更容易我已经打算写像一些功能fopen,fclose,fread,rename,等能够影子基础功能,并直接把我的给我的文件系统调用,而不是原来的一个.对于前三个功能,一切都适合我使用这些原型:
File *fopen(String _Filename, String _Mode); // i have my own optimized File struct
void fclose(File *_File);
size_t fread(String *_DstBuf, size_t _ElementSize, size_t _Count, File *_File);
这工作正常,因为我要么返回另一个结构或参数除了a File*而不是a FILE*,但重命名函数似乎有点棘手!
int rename(String _OldFilename, String _NewFilename);
这几乎是相同的原型.除了我使用std::string(typedef'ed String)比const char*!知道我怎么能说服我的编译器使用我的函数或忽略stdio-one?
首先,我在谈论类UNIX系统.
我看一下Mac OS,Linux,Minix和K&R C书中"FILE"结构的定义,它们都是不同的.
在K&R C书中,很清楚
typedef struct _iobuf{
int cnt;
char *ptr;
char *base;
int flag;
int fd;
} FILE;
Run Code Online (Sandbox Code Playgroud)
在Mac OS上,它在结构中有更多东西.
在Linux(3.0)上,它是
typedef _IO_FILE FILE;
Run Code Online (Sandbox Code Playgroud)
标题显示"在C++ iostreams之上定义ISO C stdio".嗯...?(Linux上的C是用C++实现的吗?不应该相反吗?)看起来_IO_FILE定义在libio.h中
在Minix上,定义与K&R非常相似.
我的unstanding是stdio.h应该是C的一部分.第一个C编译器是用汇编语言实现的.并且C应该独立于OS类型.
HW上的机器代码 - > asm - > C - >更复杂的C - > UNIX
现在,在不同的操作系统(各种UNIX)上有不同的stdio.h,编译器都是gcc.
怎么理解这个?
非常感谢,阿尔弗雷德
我有一个带有一些示例文本的文本文件"hello.txt".当我在十六进制编辑器中打开文件时,我可以看到换行符的\ r \n字符.但是当我在带有getc()的C程序中读取文件时,\ r \n会以某种方式消失,我只会看到\n字符.
我试图在线搜索和stackoverflow但没有运气.
hello.txt的
Sample
File
Run Code Online (Sandbox Code Playgroud)
码:
#include <stdio.h>
int main()
{
FILE *fp;
fp = fopen("hello.txt", "r");
int character = 0;
while( (character = getc(fp)) != EOF)
{
printf("%.2X ", character);
}
return 0;
}
Run Code Online (Sandbox Code Playgroud)
输出:
53 61 6D 70 6C 65 0A 46 69 6C 65
Run Code Online (Sandbox Code Playgroud)
从十六进制编辑器看到的文件:
53 61 6D 70 6C 65 0D 0A 46 69 6C 65
Run Code Online (Sandbox Code Playgroud)
可以看出,使用getc()函数时,0D0A仅输出0A.
为什么getc()会避免'\ r'字符?如何让它返回给定文件中的EXACT数据,即没有任何转换\ r \n到\n?
我正在尝试为Linux编写一个简单的C程序,它将生成一个1 MB的文件,但我无法使用此代码.当我尝试运行它时,我得到一个seg错误错误消息,我不确定它出错的地方.我确实有一个预感,它与fseek有关:
#include <stdio.h>
int main(int argc, char *argv[])
{
FILE *fp;
fp = fopen(argv[0], "w");
fseek(fp, 1000000 - 1, SEEK_SET);
fputc('\0', fp);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
谁能指出我正确的方向?
我刚刚发现函数fprintf可以用来在屏幕上打印一些东西.
我在下面有这个最小值,但是它不会向屏幕输出任何内容.为什么?
#include <stdio.h>
int main(void)
{
int i,j,k;
for(i=0;i<4;i++)
{
for(j=0;j<0;j++)
{
for(k=0;k<3;k++)
{
printf("test\n");
fprintf(stderr, "test\n");
}
}
}
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我正在运行ubuntu 14.04并按如下方式编译此代码:gcc main.c -o main
关于C中序列点的维基百科条目具有以下序列点:
与输入/输出格式说明符关联的每次转换后.例如,在表达式printf("foo%n%d",&a,42)中,在评估%n之后和打印之前有一个序列点42
但C标准也说:
函数指示符的评估顺序,实际参数和实际参数中的子表达式是未指定的,但在实际调用之前有一个序列点.
对于像这样的代码,这两点似乎是矛盾的
int i=1;
printf("%d, %d and %d\n", i++, i++, i--);
Run Code Online (Sandbox Code Playgroud)
根据每个格式说明符后的维基百科条目,有一个序列点,所以它将打印如下:
1,2,3
但根据C标准中未指明的beaviour条目,它可以打印任何东西.
c stdio operator-precedence undefined-behavior sequence-points