小编dra*_*sht的帖子

使用数组初始化struct

我有几个数组:

const string a_strs[] = {"cr=1", "ag=2", "gnd=U", "prl=12", "av=123", "sz=345", "rc=6", "pc=12345"};
const string b_strs[] = {"cr=2", "sz=345", "ag=10", "gnd=M", "prl=11", "rc=6", "cp=34", "cv=54", "av=654", "ct=77", "pc=12345"};
Run Code Online (Sandbox Code Playgroud)

然后我需要解析'='然后将值放在结构中.(rc键映射到结构中的fc键),其形式为:

struct predict_cache_key {
    pck() :
        av_id(0),
        sz_id(0),
        cr_id(0),
        cp_id(0),
        cv_id(0),
        ct_id(0),
        fc(0),
        gnd(0),
        ag(0),
        pc(0),
        prl_id(0)
    { }

    int av_id;
    int sz_id;
    int cr_id;
    int cp_id; 
    int cv_id;
    int ct_id;
    int fc;
    char gnd;
    int ag;
    int pc;
    long prl_id;
};
Run Code Online (Sandbox Code Playgroud)

我遇到的问题是数组不是与struct字段顺序或顺序相同.因此,我需要检查每个,然后想出一个方案,将相同的结构放入结构中.

有什么帮助使用C或C++来解决上述问题?

c c++ parsing

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

2D数组索引 - 未定义的行为?

我最近进入了一些代码,做了一些有问题的2D数组索引操作.以下面的代码示例为例:

int a[5][5];
a[0][20] = 3;
a[-2][15] = 4;
a[5][-3] = 5;
Run Code Online (Sandbox Code Playgroud)

上面的索引操作是否受到未定义的行为的影响?

c arrays multidimensional-array undefined-behavior

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

fgets() 如何跟踪它在哪一行?

此代码正确地逐行读取文件,将每一行存储在 line[] 中并打印出来。

int beargit_add(const char* filename) {
    FILE* findex = fopen(".beargit/.index", "r");

    char line[FILENAME_SIZE];
    while(fgets(line, sizeof(line), findex)) {
        strtok(line, "\n");
        fprintf(stdout, "%s\n", line);
    }
    fclose(findex);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

但是,我很困惑为什么在 while 循环中使用 fgets() 实际上是逐行读取文件的。在学习了 Python 和 Java 之后,我是 C 的新手。

由于对 fgets() 的每次调用都是独立的,所以每次调用它时,C 在哪里记住它当前在哪一行?我认为这可能与将值更改为FILE* index点有关,但是您将指针按值传递给 fgets(),因此无法对其进行修改。

非常感谢任何帮助理解 C 的魔力!

c file stream

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

制作便携式代码

关于开源项目的所有大惊小怪,为什么还没有一个强大的标准,使你能够制作可移植的代码(我的意思是C/C++没有JavaC#)每个人都有点自己做汤.

甚至还有一些第三方文库Apache Portable Runtime.

c c++ portability

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

如何在 using 语句之外使用变量?

如何在 using 语句之外使用变量?

我有这个代码:

using (SqlConnection connection = new SqlConnection(ConfigurationManager.ConnectionStrings["batch"].ConnectionString))
{
    var size = FileBusinessLogic.LoadBatchAvgFileSizes(connection);  // size is a list
}
Run Code Online (Sandbox Code Playgroud)

我需要在使用之外使用“var size”,但我不知道如何使用。我怎样才能得到列表的第二列(大小)?

有人有想法吗?

c# variables scope using list

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

Bash在目录中的文件/文件中查找代码行

我怎样才能找到这条线:

 print("hello world)"
Run Code Online (Sandbox Code Playgroud)

x/y/z目录中,文件/文件可以位于x树的任何分支中(其中目录x有许多子文件夹)

linux directory bash shell

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

如果未定义,则跳过函数调用

我有一个由不同模块组成的程序.模块通过函数调用互连.例如,State Init调用每个模块的init函数.应该可以禁用模块(从编译中排除).最简单的方法是使用预处理器定义.但这会产生大量代码:

#IF MODULE_XXX_COMPILE
     ret = module_func(...);
#ELSE
     ret = 0;
#ENDIF
Run Code Online (Sandbox Code Playgroud)

我想得到一个像这样的宏:

ret = MOD_COMPILE_CALL(module_func(...));
Run Code Online (Sandbox Code Playgroud)

因此宏检查define是否为1如果是,它执行函数,否则它会跳过执行并返回0.问题是我的编译器告诉我它不可能#IF在宏中使用.有办法解决吗?

c macros c-preprocessor

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

使用 libpq 在表中插入浮点数

我正在使用libpq. 我收到此错误INSERT failed: ERROR: insufficient data left in message

这是我的代码库中的相应片段:

printf ("Enter write parameter_value");
scanf("%f", &parameter_value);

char *stm = "INSERT INTO write_reg_set (parameter_value) VALUES ($1::double precision)";

int nparam = 1;

//set the values to use
const char *values[1] = {(char *)&parameter_value};

//calculate the lengths of each of the values
int lengths[1] = {sizeof(parameter_value)};

//state which parameters are binary
int binary[1] = {1};

PGresult *res = PQexecParams(conn,
                     stm,
                     nparam,  //number of parameters
                     NULL,    //ignore the Oid field …
Run Code Online (Sandbox Code Playgroud)

c postgresql libpq

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

套接字编程:客户端打印垃圾字符串

我是网络编程的新手,我们在实验室中应该做的第一个程序是一个程序,其中两个系统,客户端和服务器相互发送消息.我的程序没有编译器错误,但无论何时通过网络发送消息,它都无法在另一端正确显示.而是显示一个不可读的框(我认为正在打印垃圾字符串,但不知道为什么).

在此处查看屏幕截图

代码:

client.c

int main()
{
    char server_message[256]="You have reached the server!!\n";
    //create a socket
    int nw_socket;
    nw_socket=socket(AF_INET,SOCK_STREAM,0);

    //specify address for socket

    struct sockaddr_in server_address;
    server_address.sin_family = AF_INET;
    server_address.sin_port = htons(9999);
    server_address.sin_addr.s_addr = INADDR_ANY;

    //establish a connection
    int connection_status = connect(nw_socket, (struct sockaddr *) & server_address, sizeof(server_address));

    //check for errors

    if(connection_status==-1)
    {
        perror("There was a problem initiating the connection.\n");
    }
    else
    {
        printf("The connection was successful.\n");
    }

    int send_val = send(nw_socket,server_message,sizeof(server_message),0);
    if(send_val==-1)
        perror("\nError while sending: ");
    //receive data

    char …
Run Code Online (Sandbox Code Playgroud)

c sockets network-programming

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

在 C 中,如果我们在同一操作中将位左移超出范围并再次右移值会发生什么

在 unsigned short 的情况下,我将 383 向左移动了 11 个位置,然后在同一条指令中再次将其向右移动了 15 个位置,我预计该值为 1 但它是 27。但是当我在不同的指令中同时使用这两个移位操作时之后(先左移,然后右移),输出为 1。这是一个示例代码:-

unsigned short seed = 383;
printf("size of short: %d\n",sizeof(short));
unsigned short seedout,seed1,seed2,seed3,seedout1;
seed1 = (seed<<11);
seed2 = (seed1>>15);
seed3 = ((seed<<11)>>15);
printf("seed1 :%d\t  seed2: %d\t seed3: %d\n",seed1,seed2,seed3);
Run Code Online (Sandbox Code Playgroud)

它的输出是:

size of short: 2
seed1 :63488      seed2: 1       seed3: 23    
seedout1: 8     seedout :382
Process returned 0 (0x0)   execution time : 0.154 s
Run Code Online (Sandbox Code Playgroud)

c

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