小编Thi*_*ame的帖子

为什么我不应该使用atoi()?

有人告诉我,我不应该使用atoi(),而且我应该总是使用strtol().这有什么错atoi(),我不应该使用它?是strtol()真的,而不是用正确的事情?(那么strtol()返回a 的事实呢long,不是int那样的atoi()吗?)

c

8
推荐指数
3
解决办法
4049
查看次数

什么做putchar('0'+ num); 做?

我试图了解它是如何putchar('0' + r);工作的.下面,该函数采用整数并将其转换为二进制.

void to_binary(unsigned long n)
{
   int r;
   r = n % 2;
   if (n >= 2)
      to_binary(n / 2);
   putchar('0' + r);
}
Run Code Online (Sandbox Code Playgroud)

我谷歌putchar的定义,但我没有找到这个.为了测试它,我添加了一个printf来查看r的值:

void to_binary(unsigned long n)
{
   int r;
   r = n % 2;
   if (n >= 2)
      to_binary(n / 2);
   printf("r = %d and putchar printed ", r);
   putchar('0' + r);
   printf("\n");
}
Run Code Online (Sandbox Code Playgroud)

然后我运行它(键入5)并获得此输出:

r = 1并且putchar打印1
r = 0并且putchar打印0
r = 1并且putchar打印1

所以我认为putchar('0' + r); 如果r = 0 …

c putchar

8
推荐指数
1
解决办法
3491
查看次数

在C中通过const引用

C支持是否像C++一样通过const引用?如果没有,还有其他方法可以使传值更有效吗?我认为仅仅因为它更有效而传递对函数的引用是没有意义的.

c c++ pass-by-reference pass-by-const-reference

5
推荐指数
1
解决办法
2134
查看次数

fread 在缓冲区中存储随机字符

我只是尝试使用 fread 读取文件并输出内容。它部分工作。它正确输出所有内容,但以一堆随机字符结尾。

#include <iostream>

using namespace std;

void ReadFile(char* filename,char*& buffer)
{
    FILE *file = fopen(filename,"rb");

    fseek(file,0,SEEK_END);
    int size = ftell(file);
    rewind(file);

    buffer = new char[size];
    memset(buffer,0,size);

    int r = fread(buffer,1,size,file);
    cout << buffer;

    fclose(file);
}

int main()
{
    char* buffer;
    ReadFile("test.txt",buffer);
    cin.get();
}
Run Code Online (Sandbox Code Playgroud)

假设在这种情况下“大小”是 50。出于某种原因,调用 fread 后缓冲区的大小最终为 55 或 56。我在使用它之前清空了缓冲区并尝试输出它,一切正常(它是空的)。在调用 fread 之后,缓冲区以某种方式变大并填充了随机字符。我已经在十六进制编辑器中打开了文本文件,以确保没有我没有看到但没有看到的任何内容。该文件为 50 字节。fread 返回读取的字节数,在这种情况下返回到 'r','r' 应该是什么。那么这些字节的母 eff 是从哪里来的呢?

简化: fread 返回正确的读取字节数,但缓冲区在调用 fread 后以某种方式使自身变大,然后用随机字符填充它。为什么?

我一生都无法弄清楚这是怎么发生的。

此外,在任何人给我一个简单的修复之前,我已经知道我可以只做 buffer[r] = '\0' 并且不再输出随机字符,但我更想知道为什么会这样。

c++ fread readfile

2
推荐指数
1
解决办法
2430
查看次数

指针不是C的预期值

我有这样的代码:

int *x[2];
int var0 = 10;
int var1 = 20;
int var2 = 30;
x[0] = &var0;
x[1] = &var1;
x[2] = &var2;

cout << "var0 is equal to: " << *x[0] << endl;
Run Code Online (Sandbox Code Playgroud)
var0 is equal to: 32767
Run Code Online (Sandbox Code Playgroud)

我期待的是:

  • 我初始化了包含3个项目的指针数组
  • 为3个变量分配了一些值
  • 将此变量的地址分配给指针数组的项目
  • 现在我期待:*x[0] = 10, *x[1] = 20, *x[2] = 30,但正如你从例子中看到的那样*x[0] == 32767.为什么?

c++ arrays pointers

1
推荐指数
1
解决办法
126
查看次数