小编plu*_*uck的帖子

究竟什么是C/C++中的类型转换?

究竟什么是C/C++中的类型转换?编译器如何检查是否需要显式类型转换(并且是否有效)?它是否比较了值所需的空间?如果我有例如:

int a;
double b = 15.0;
a = (int) b;
Run Code Online (Sandbox Code Playgroud)

如果我没记错的话,double值需要更多的空间(是8字节?!)而不是整数(4字节).并且两者的内部表示完全不同(在两个/尾数上的补码).那么内部会发生什么?这里的例子非常简单,但在C/C++中有很多类型.

如果我可以将例如FOO转换为BAR,编译器如何知道(或程序员)?

c c++ types casting

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

在c中分配内存并保存字符串

我想知道为什么下面的代码不起作用

int main(int argc, char **argv)
{
     char *test = (char*) malloc(12*sizeof(char));
     test = "testingonly";
     free(test);
}
Run Code Online (Sandbox Code Playgroud)

在考虑之后,我的假设是首先在内存中为12个字符分配空间,但是下一行中的赋值在堆栈上创建一个char数组,并将其内存地址传递给test.所以free()尝试释放堆栈上不允许的空间.那是对的吗?

那么在堆上保存字符串的正确方法是什么?以下是一种常见的方式吗?

int main(int argc, char **argv)
{
     char *test = (char*) malloc(12*sizeof(char));
     strcpy(test, "testingonly");
     free(test);
}
Run Code Online (Sandbox Code Playgroud)

c string malloc free

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

如何使用PAM以明文形式检索用户密码?

我正在编写一个PAM模块,它将用户名/密码写入文件,以供其他应用程序进一步处理.我只看到了PAM_AUTHTOK项,但我不确定它是从哪种类型开始的.有人知道这个或其他方式来获取明文密码吗?

c pam

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

我如何知道字符串是否以 null 结尾?

我正在使用 fgetc 从文件中读取字符串。因为我不知道字符串有多长,所以我需要为保存数据的数组重新分配空间。为此,我需要知道当前数组何时已满。我不太确定 char 数组在读取字符后是否以空终止。例如,我有一个大小为 8 的数组,fgetc 将给我第 9 个字符。现在数组的大小是8还是9?(8 个字符 + \0 或仅 8 个字符)。有办法测试一下吗?而如果没有\0。当我读完字符串后,我需要自己将它添加到char数组中吗?

c string

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

如何使用倒置页表节省空间?

如果我们使用反向页表将虚拟地址映射到物理地址,为什么我们会节省内存?如果我们有两个进程都有4个页面,那么我们将在两个不同的表中指向虚拟到物理地址的8个条目:

Process 1:
[0] = 1
[1] = 5
[2] = 63
[3] = 0

Process 2:
[20] = 14
[21] = 55
[22] = 11
[25] = 9
Run Code Online (Sandbox Code Playgroud)

如果我们使用倒置页表,我们只会有一个大表指向它.但在规模上他们是平等的.

2) Inverted page table

[0] = <p1 | 3>
[1] = <p1 | 0>
[5] = <p1 | 1>
[9] = <p2 | 25>
[11]= <p2 | 22>
[14]= <p2 | 20>
[55]= <p2 | 21>
[63]= <p1 | 2>
Run Code Online (Sandbox Code Playgroud)

operating-system memory-management

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

使用参数回调

我试图弄清楚如何使用C中的参数回调.以下不起作用.什么是最好的方法来实现它?(传递回调函数的参数)

#include <stdio.h>

void caller(int (*cc)(int a)) {
    cc(a);
}

int blub(int a) {
    printf("%i", a); 
    return 1;
}

int main(int argc, char** argv)
{
    caller(blub(5));
    return 1;
}
Run Code Online (Sandbox Code Playgroud)

c callback

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

如何传递指针并在堆上分配空间

我正在尝试向函数提供一个char指针,然后用函数填充它,以便调用函数可以使用它.因为它总是在调用函数中给我奇怪的东西,我写了一个关于我所做的简单表示:

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

void bla(char *t)
{
    t = (char*) malloc(5);
    if (t != 0) {
        t[0] = 'h';
        printf("%c\n", t[0]);
    }
}

int main(int argc, char **argv)
{
    char b[10];

    bla(b);
    printf("%c\n", b[0]);
    return 1;
}
Run Code Online (Sandbox Code Playgroud)

我不太确定C传递参数副本是否有事可做.我需要将指针传递给指针,还是有更好的解决方案?

编辑:

对不起的家伙,但我没有得到它.你能看一下这个例子:

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

void blub(char **t)
{
    printf("%d\n", *t);
    *t = (char*) malloc(sizeof(char) * 5);
    *t[0] = 'a';
    *t[1] = 'b';
    printf("%d\n", *t);
    printf("%d\n", *t[0]);
    printf("%d\n", *t[1]);
}

int main(int argc, char **argv)
{
    char *a;
    blub(&a); …
Run Code Online (Sandbox Code Playgroud)

c pointers

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