小编Sou*_*osh的帖子

将字符串与变量连接并在C/C++中将其视为宏

我试图弄清楚如何编写一个宏,将一个变量的值附加到字符串.这是一个非工作代码的片段,但我正在展示它,以便我可以解释我想要做什么

#include <iostream>
#include <string>
#include <sstream>

using namespace std;

#define  DATA_RESPONCE_0 23
#define  DATA_RESPONCE_1 24
#define  DATA_RESPONCE_2 25
#define  DATA_RESPONCE_3 26

#define my_macro(x) DATA_RESPONCE_##x


int main() {

    int i = 0;
    int k;

    k = my_macro (i);

    cout << k;

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

在这种情况下,宏被扩展为DATA_RESPONCE_i,但我希望它是DATA_RESPONCE_0,因此23应该打印为k的值.

c++ c++11

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

C中的代码块(调试模式)中的未定义行为是否会损坏我的电脑上的文件?

我的问题是:在代码块上以调试模式运行的C程序是否有可能删除计算机上的重要数据?(比如更改指针的值而不是指向它的值,然后取消引用它)

c undefined-behavior

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

从fgets()的返回值赋值

我的理解是fgets()返回输入的字符串参数,但是,

我收到"错误:从类型'char*'"分配类型'char [101]'时出现不兼容的类型,

那么,为什么变量'line'被认为是'char [101]'而不是'char*'?

char line[101] = "";

while (feof(filePtr) == 0){
    line = fgets(line, 101, filePtr);
    strcpy(strPtr, line);
}
Run Code Online (Sandbox Code Playgroud)

c pointers fgets

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

具有未定义长度但只有一个int元素的数组的用途是什么?

我有一个头文件,声明这些数组:

int stVal_On[] = {2};
int stVal_Off[] ={1};
int subVal_On[]={1};
int subMss[]={1};
int subVal_Off[]={0};
Run Code Online (Sandbox Code Playgroud)

然后在声明的结构中使用解除引用的数组:

在此输入图像描述

WriteData结构的定义:

/* Write structure used in loop for Read- and Write Tests */
typedef struct WriteData {
    char* name;                 // MMS object name
    const VOID* data;           // Data to write
    const SINT32 localFormat;   // SVI type (on server)
    const SINT32 dataLength;    // length of data to write/read
    const SINT32 NbrofElmnts;   // Number of elements to write/read
    char* description;          // SVI type as String (on server) …
Run Code Online (Sandbox Code Playgroud)

c arrays struct

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

浮动随机化后程序崩溃

在计算圆[3] [6]时,程序似乎在第54行崩溃.可能是什么导致了这个?我输入了一堆打印语句来查找一些信息,所有内容似乎都很好,直到完全[3] [6],这似乎没什么特别的,它崩溃.

int main() {

double a, b, circleXMax, circleYMax, circleRMax;
double rand_float(double a, double b);
int i, j;
int circleInfo = 3;
int circleNum = 50;
int PI = 3.14;
double circleArea;
double circleAreaMax = 0;
double circles[circleInfo][circleNum];

printf("Opened \n");

for(i = 1; i <= circleNum; i++) {
    printf("Start of i = %d \n", i);
    for(j = 1; j <= circleInfo; j++) {
        printf("Start of j = %d \n", j);
        if(j == 1 || j == 2) { …
Run Code Online (Sandbox Code Playgroud)

c random double

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

如何在不使用头文件的情况下编写hello world

如何在不使用C中的头文件的情况下编写hello world?

#include<conio.h>
#include<stdio.h>

void main(){

printf("Hello World");
getch();

}
Run Code Online (Sandbox Code Playgroud)

这是带头文件的简单C程序......

  • conio.h - 用于控制台
  • stdio.h- 用于printfscanf

c header-files forward-declaration

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

char*字符串文字如何有效?

所以从我的理解指针变量指向一个地址.那么,以下代码如何在C++中有效?

char* b= "abcd"; //valid
int *c= 1; //invalid
Run Code Online (Sandbox Code Playgroud)

c c++ pointers initialization

0
推荐指数
2
解决办法
715
查看次数

"is_linux"变量有特殊含义吗?

我不明白为什么if以下声明的结果总是不正确的:

unsigned long is_linux;
printf("plz. enter a digit : ");

gets(str);
sscanf(str,"%d",&is_linux);

printf("the value of is_linux = %d \n",is_linux);
if(is_linux==1)
    printf("Here is 1 ! \n");
else
    printf("There is 0 ! \n");
Run Code Online (Sandbox Code Playgroud)

我只能得到"有0!" 声明,即使我输入"1".此外,printf()语句is_linux正确显示(1)的值:

plz. enter a digit : 1
the value of is_linux = 1 
There is 0 !
Run Code Online (Sandbox Code Playgroud)

例如,如果我将变量更改为其他名称,则效果很好test.有没有理由不使用is_linux变量?我用gccat 编译了上面的源代码x86_64-redhat-linux.

c variables

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

警告:逗号的右侧操作数对gcc 4.4.7没有影响

在Linux gcc 4.4.7中,我需要您的帮助以获得以下警告

for (int iLoop1= 0; iLoop1< iLoopN; ++iLoop1, ++iLoop2, !iIsOk)
Run Code Online (Sandbox Code Playgroud)

我在最后一个逗号之后的最后一个参数中发出以下警告

error: right-hand operand of comma has no effect
Run Code Online (Sandbox Code Playgroud)

我已经阅读了逗号运算符的wiki页面,但我不明白这个问题 https://en.wikipedia.org/wiki/Comma_o​​perator

编辑:有效!iIsOk没有做任何我测试以下代码

// Example program
#include <iostream>
#include <string>
#include <iostream>

int main()
{

    int iIsOk = 0;

    for (int iLoop1 = 0; iLoop1 < 2; iLoop1++, !iIsOk)
    {
       std::cout << "IsOk=" << iIsOk << std::endl;
    }

      for (int iLoop1 = 0; iLoop1 < 2; iLoop1++, iIsOk = !iIsOk)
    {
       std::cout << "IsOk2=" << iIsOk << std::endl;
    } …
Run Code Online (Sandbox Code Playgroud)

c c++ gcc

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

指针堆分配如何为C中的结构分配足够的空间?

以下代码可以编译并完美运行:

typedef struct n {
    char value;
    struct n* next;
} node;
void insert_new_node(node** head, char new_value)
{
    node* new_node = malloc(sizeof(node*));
    new_node->value = new_value;
    new_node->next = NULL;

    if(*head == NULL)
    {
        *head = new_node;
    }
    else
    {
        node* current = *head;

        while(current->next != NULL)
        {
            current = current->next;
        }

        current->next = new_node;
    }
}
Run Code Online (Sandbox Code Playgroud)

我的问题是-请注意,我实际上实际上只是为指向结构的指针分配了空间,而不是为结构本身分配了空间(ref:)node* new_node = malloc(sizeof(node*));。所以我的问题是,该结构数据实际存储在哪里,如果存储在堆中,它将如何工作?

c memory malloc pointers dynamic-memory-allocation

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