小编Zie*_*ezi的帖子

为什么这个for循环在某些平台上退出而不在其他平台上退出?

我最近开始学习C,我正在以C为主题.我正在玩循环,我遇到了一些我不知道如何解释的奇怪行为.

#include <stdio.h>

int main()
{
  int array[10],i;

  for (i = 0; i <=10 ; i++)
  {
    array[i]=0; /*code should never terminate*/
    printf("test \n");

  }
  printf("%d \n", sizeof(array)/sizeof(int));
  return 0;
}
Run Code Online (Sandbox Code Playgroud)

在我的运行Ubuntu 14.04的笔记本电脑上,此代码不会中断.它运行完成.在我学校的运行CentOS 6.6的计算机上,它运行良好.在Windows 8.1上,循环永远不会终止.

更奇怪的是,当我将for循环条件编辑为:时i <= 11,代码只会在运行Ubuntu的笔记本电脑上终止.它永远不会在CentOS和Windows中终止.

任何人都可以解释内存中发生的事情以及运行相同代码的不同操作系统为什么会产生不同的结果?

编辑:我知道for循环超出范围.我是故意这样做的.我无法弄清楚不同操作系统和计算机之间的行为有何不同.

c debugging buffer-overflow undefined-behavior

240
推荐指数
9
解决办法
2万
查看次数

如何在C++中将字符串转换为char数组?

我想转换stringchar数组但不是char*.我知道如何将字符串转换为char*(通过使用malloc或我在代码中发布它的方式) - 但这不是我想要的.我只是想转换stringchar[size]数组.可能吗?

#include <iostream>
#include <string>
#include <stdio.h>
using namespace std;

int main()
{
    // char to string
    char tab[4];
    tab[0] = 'c';
    tab[1] = 'a';
    tab[2] = 't';
    tab[3] = '\0';
    string tmp(tab);
    cout << tmp << "\n";

    // string to char* - but thats not what I want

    char *c = const_cast<char*>(tmp.c_str());
    cout << c << "\n";

    //string to char
    char tab2[1024];
    // …
Run Code Online (Sandbox Code Playgroud)

c++ string type-conversion

89
推荐指数
6
解决办法
50万
查看次数

Enum vs强类型枚举

我是C++编程的初学者.

今天我遇到了一个新主题:强类型enum.我对它进行了一些研究但到目前为止我无法找到为什么我们需要这个以及它的用途是什么?

例如,如果我们有:

enum xyz{a, b, c};
/*a = 0, b = 1, c = 2, (Typical C format)*/
Run Code Online (Sandbox Code Playgroud)

为什么我们需要写:

enum class xyz{a, b, c};
Run Code Online (Sandbox Code Playgroud)

我们在这里做什么?我最重要的疑问是如何使用它.你能提供一个小例子,这会让我理解.

c++ enums c++11

81
推荐指数
4
解决办法
6万
查看次数

如何检查对象的类型是否是C++中的特定子类?

我正在考虑使用typeid()但我不知道如何询问该类型是否是另一个类的子类(顺便说一下,它是抽象的)

c++ class subclass identification

61
推荐指数
6
解决办法
10万
查看次数

Fortran:整数*4 vs整数(4)vs整数(kind = 4)

我正在尝试学习Fortran,我看到很多不同的定义被传递,我想知道他们是否想要完成同样的事情.以下有什么区别?

  • integer*4
  • integer(4)
  • integer(kind=4)

fortran language-lawyer

55
推荐指数
3
解决办法
3万
查看次数

如何在C++中的switch语句中使用枚举值

我想enum为一个switch语句使用一个值.是否可以使用所enum包含的值"{}"作为switch()"?我知道switch()需要一个integer值才能将编程流程指向适当的case数字.如果是这种情况,我是否只为每个常量创建一个变量在enum声明中?我还希望用户能够选择并将该选择传递给switch()语句.

例如:

cout << "1 - Easy, ";
cout << "2 - Medium, ";
cout << "3 - Hard: ";

enum myChoice { EASY = 1, MEDIUM = 2, HARD = 3 };

cin >> ????

switch(????)
{
case 1/EASY:  // (can I just type case EASY?)
    cout << "You picked easy!";
    break;

case 2/MEDIUM: 
    cout << "You picked medium!"; …
Run Code Online (Sandbox Code Playgroud)

c++ enums switch-statement

38
推荐指数
5
解决办法
12万
查看次数

**用C语言做什么

我是C的新手,具有良好的java背景,我正在尝试理解指针和数组.

我知道下标operator[]是数组定义的一部分,所以:

int numbers[] = {1,3,4,5};
Run Code Online (Sandbox Code Playgroud)

会创建一个整数数组,它将在内存中表示为16个字节,4个4个字节:

numbers[0] = 1, address 0061FF1C
numbers[1] = 3, address 0061FF20
numbers[2] = 4, address 0061FF24
numbers[3] = 5, address 0061FF28
Run Code Online (Sandbox Code Playgroud)

但是,当涉及指针时,我的知识开始崩溃,所以如果我要创建一个指向数组数字的指针,我将执行以下操作:

int *pNumbers = &numbers[0];
Run Code Online (Sandbox Code Playgroud)

看起来像这样:

指向数字的指针

而且我猜它的大小是4字节?

然而,**我读作"指针指针"对我来说没有意义,为什么有人想要指针指针,当然如果a-> b-> c然后a-> c就足够了?我知道我错过了一些东西,它必须与数组有关,argv可以是类型char[ ]char **下面看到的:

int main(int argc, char **argv){}
Run Code Online (Sandbox Code Playgroud)

所以:

  • 这是什么(**)?
  • 它有什么用途?
  • 它在记忆中如何表现?

c memory arrays pointers

37
推荐指数
6
解决办法
4万
查看次数

没有对象就无法调用成员函数

该程序具有用户输入name/ age对,然后使用类输出它们.这是代码.

#include "std_lib_facilities.h"

class Name_pairs
{
public:
       bool test();
       void read_names();
       void read_ages();
       void print();
private:
        vector<string>names;
        vector<double>ages;
        string name;
        double age;
};

void Name_pairs::read_names()
{
     cout << "Enter name: ";
     cin >> name;
     names.push_back(name);
     cout << endl;
}

void Name_pairs::read_ages()
{
     cout << "Enter corresponding age: ";
     cin >> age;
     ages.push_back(age);
     cout << endl;
}

void Name_pairs::print()
{
     for(int i = 0; i < names.size() && i < ages.size(); ++i)
             cout << names[i] << " …
Run Code Online (Sandbox Code Playgroud)

c++

33
推荐指数
4
解决办法
17万
查看次数

怎么检测malloc失败?

检查是否malloc未能分配非零内存块的可移植方法是什么?

c

28
推荐指数
4
解决办法
5万
查看次数

你如何用C++打开文件?

我想打开一个文件进行阅读,即C++方式.我需要能够做到:

  • 文本文件,涉及某种读取线功能.

  • 二进制文件,它提供了一种将原始数据读入char*缓冲区的方法.

c++ io file

27
推荐指数
2
解决办法
11万
查看次数