小编Yuk*_*awa的帖子

ANSI C - 如何逐字逐句读取stdin?

码:

#include <stdio.h>
int main(void) {
    char i[50];
    while(scanf("%s ", i)){
        printf("You've written: %s \n", i);
    }
    printf("you have finished writing\n");

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

一个问题是代码没有按预期执行.如果我输入:

abc def ghi.
Run Code Online (Sandbox Code Playgroud)

它会输出:

You've written: abc
You've written: def
Run Code Online (Sandbox Code Playgroud)

我该如何解决?目标是从stdin读取每个单词,直到它达到"ENTER"或".".(点).

c

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

无法继承的事情

我被要求列出三个不能从基类继承的东西.

除了私人会员功能,还可以添加什么?

我考虑过朋友函数,但由于它们实际上并不属于类,它们与继承无关.

c++ inheritance

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

通过Mat :: at获取一个像素

我正试图从Mat对象中获取一个像素.为了测试我尝试在正方形上绘制一条对角线,并期望从左上角到右下顶点获得完美的线交叉.

for (int i =0; i<500; i++){
     //I just hard-coded the width (or height) to make the problem more obvious

  (image2.at<int>(i, i)) = 0xffffff;
     //Draw a white dot at pixels that have equal x and y position.
}
Run Code Online (Sandbox Code Playgroud)

然而,结果并不像预期的那样.这是在彩色图片上绘制的对角线. 在此输入图像描述 这是灰度图片. 在此输入图像描述 有谁看到了这个问题?

c++ opencv

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

通过信号名称查找信号编号

我想捕获 signal SIGTSTP,就像这样简单:

trap "" SIGTSTP
Run Code Online (Sandbox Code Playgroud)

然而,纯 shell ( sh) 不支持信号名称,因此陷阱必须使用信号编号来代替,如下所示:

trap "" 20
Run Code Online (Sandbox Code Playgroud)

问题:信号编号取决于操作系统,因此 Linux 中的 SIGTSTP 为 20,但在 AIX 中为 18。

因此,为了使其通用,我决定从 的结果中提取信号编号trap -l。原始输入是:

 1) SIGHUP       2) SIGINT       3) SIGQUIT      4) SIGILL
 5) SIGTRAP      6) SIGABRT      7) SIGEMT       8) SIGFPE
 9) SIGKILL     10) SIGBUS      11) SIGSEGV     12) SIGSYS
13) SIGPIPE     14) SIGALRM     15) SIGTERM     16) SIGURG
17) SIGSTOP     18) SIGTSTP     19) SIGCONT     20) SIGCHLD
21) SIGTTIN     22) SIGTTOU     23) SIGIO       24) SIGXCPU
25) SIGXFSZ …
Run Code Online (Sandbox Code Playgroud)

linux shell aix signals sed

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

如何将neo4j转储导入当前数据库

我可以获得当前数据库的转储,如下所示:

neo4j-shell -c dump > dump.sql
Run Code Online (Sandbox Code Playgroud)

现在如何将该转储文件导入另一个数据库(使用shell)

neo4j

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

通过C套接字发送原始二进制数据?

我正在通过C中的套接字发送加密数据.一切正常,直到我意识到发送的数据的大小比它应该的大得多.下面的代码描述了这种情况:

#include <stdlib.h>
#include <stdio.h> 
#include <string.h>

int main() {
    char temp[100], buffer[100];
    int n = 1234567890;
    sprintf(temp, "%d", n);
    printf("Original n has size: %d\n", sizeof(n)); // 4
    printf("Buffer size: %d\n", strlen(temp));      //10
    printf("Buffer: %s", temp);
}
Run Code Online (Sandbox Code Playgroud)

问题是原始数字存储为4字节整数,而缓冲区是逐字符存储的,因此通过套接字发送的不是4个字节,而是一个字节字符的10s.

我想知道有没有办法将二进制数据作为原始数据发送?

c sockets networking

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

unsigned long long不会存储大数字

我对C/C++ unsigned long long类型感到困惑,因为理论上它应该存储最多2 ^ 64-1,这是一个19位十进制数,但是代码如下:

unsigned int x = 1000000u; //(One million)
unsigned long long k = (x*x);
cout << k << endl;
Run Code Online (Sandbox Code Playgroud)

打印出3567587328,这是不正确的.现在1,000,000 ^ 2导致1,000,000,000,000 - 一个12位十进制数字,低于偶数限制signed long long.怎么会发生这种情况?它与我正在运行的系统有什么关系吗?(32位Ubuntu)

如果我需要一个64位系统来实现64位操作,那么另一个问题出现了:大多数编译器使用线性同余生成器生成随机数,如下所示:

x(t) = (a*x(t-1) + c) mod m.
Run Code Online (Sandbox Code Playgroud)

a并且c通常是32位大数,m是2^32-1 因此a*x(t-1)在执行模运算之前有很大机会产生64位数.

如果需要64位系统,那么自20世纪90年代以来gcc如何在16-32位机器上生成随机数?

太感谢了.

c++

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

如何在联合中使用指针

我想将一维数组指针和二维数组指针放在一个联合中,这样我就可以以任何方式访问数据.在以下程序中,我希望9通过两种方式打印出值.

#include <iostream>
class A {
public:
    union {
        int** array2D;
        int*  array1D;
    };
    A() {
        array2D = new int*[1];
        array2D[0] = new int[1];
    }
};

int main() {
    A a;
    a.array2D[0][0] = 9;
    cout << a.array2D[0][0] << endl;
    cout << a.array1D[0]    << endl;
    cout << a.array2D << endl;
    cout << a.array1D << endl;
}
Run Code Online (Sandbox Code Playgroud)

实际输出:

9
146989080
0x8c2e008 //Pointer address of array2D
0x8c2e008 //Pointer address of array1D
Run Code Online (Sandbox Code Playgroud)

地址是相同的,并且根据定义,多维数组以与一维数组相同的方式存储.我想知道为什么两人cout打印出不同的结果?我错过了什么?

编辑:感谢下面的答案,我可以看到我错过了什么.从array1D访问数据的修复方法是:

cout << *( (int*) a.array1D[0]) << …

c c++

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

C++模板自动类型提升

template <class T>
class Foo {
public:
    T val;
    Foo(T _v): val(_v){}
    friend ostream& operator<< (ostream& out, const Foo& A) {
        out << A.val;
        return out;
    }
};

template <class X, class Y> Foo<???> operator+(const Foo<X>& A, const Foo<Y> & B) {
    if (sizeof(X) > sizeof (Y))
        return Foo<X>(A.val + B.val);
    else
        return Foo<Y>(A.val + B.val);
}

int main() {
    Foo<double> a(1.5);
    Foo<int> b(2);
    cout << a << endl;
    cout << b << endl;
    cout << a+b << endl;
} …
Run Code Online (Sandbox Code Playgroud)

c++ c++03

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

无法处理ANSI C中的字符串副本

我在ANSI C中编写了一个程序来删除前面和字符串末尾的双引号,因此"Hello, world"将成为Hello, world:

码:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

char* removeQuotes(char str[]) {
    int i = 1;
    int len = strlen(str) - 2;
    char * tmp = (char*) malloc (sizeof(char) * len);
    for (;i<=len;++i ) {
        tmp[i-1] = str[i];
    }
    return tmp;
}

int main(void) {
    char str[] = "Hello, world";
    char * abc = removeQuotes(str);
    printf("Inside the quotes is: %s length: %d\n"
            "Original is: %s length: %d", abc, strlen(abc), str, strlen(str));
    return 0; …
Run Code Online (Sandbox Code Playgroud)

c

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

标签 统计

c++ ×5

c ×4

aix ×1

c++03 ×1

inheritance ×1

linux ×1

neo4j ×1

networking ×1

opencv ×1

sed ×1

shell ×1

signals ×1

sockets ×1