小编jiy*_*uru的帖子

如何比较C指针?

最近,我写了一些代码来比较像这样的指针:

if(p1+len < p2)
Run Code Online (Sandbox Code Playgroud)

但是,有些工作人员说我应该这样写:

if(p2-p1 > len)
Run Code Online (Sandbox Code Playgroud)

为了安全起见.这里,p1p2char *指针,len是整数.我对此一无所知.是吗?

EDIT1:当然,p1p2在乞讨时指向同一个内存对象.

EDIT2:就在一分钟之前,我在我的代码中找到了这个问题的bogo(大约3K行),因为len它太大了,p1+len不能存储在4个字节的指针中,所以p1 + len <p2真的.但它不应该事实上,所以我认为我们应该在某些情况下比较像这样的指针:

if(p2 < p1 || (uint32_t)p2-p1 > (uint32_t)len)
Run Code Online (Sandbox Code Playgroud)

c pointers

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

将std :: unique_ptr重置为指向数组的指针有什么问题?

我看到一些代码片段如下:

std::unique_ptr<uint8_t> mCache;
mCache.reset(new uint8_t[size]);
Run Code Online (Sandbox Code Playgroud)

有人告诉我这个代码有一些问题.谁能给我一些细节?

c++ smart-pointers unique-ptr c++11

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

K&R:C - 检测到堆栈粉碎

我的代码是这样的:

int find_test(int argc, char *argv[])
{
    char line[MAX_LINES];
    int c, except = 0, found = 0, number = 0;
    long lineno = 0;
    int i = 0;

    while(--argc > 0 && (*++argv)[0] == '-'){
        while(c = *++argv[0]){
            switch(c){
                case 'x':
                    except = 1;
                    break;
                case 'n':
                    number = 1;
                    break;
                default:
                    printf("find:illegal option %c\n", c);
                    argc = 0;
                    found = -1;
                    break;
            }
        }
    }
    if(argc != 1){
        printf("Usage:find -x -n pattern\n");
    }else{
        while(getline(line, MAX_LENGTH) > 0){
            lineno++;
            if((strstr(line, …
Run Code Online (Sandbox Code Playgroud)

c stack-corruption

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

联合只能使用其第一个成员K&R的类型初始化

我正在学习K&R C.在第6.8章中,它指出:

联合只能使用其第一个成员的类型值进行初始化; 因此,u上述联合只能用整数值初始化.

...并定义一个联合u如下:

union u_tag {
  int ival;
  float fval;
  char *sval;
} u;
Run Code Online (Sandbox Code Playgroud)

我不知道怎么理解这个.这是什么意思,初始化u必须如下:

u.ival = 323;
Run Code Online (Sandbox Code Playgroud)

很明显,情况并非如此,因为我可以初衷u为:

u.fval = 1.0;
Run Code Online (Sandbox Code Playgroud)

要么

u.sval = "hi";
Run Code Online (Sandbox Code Playgroud)

里奇是什么意思?

c unions

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

这个前K&R ch3错了吗?

像这样的代码,在第44页.

int binsearch(int x, int v[], int n) { int low, high, mid; low = 0; high = n - 1; while(low <= high){ mid = (high+low)/2; if(x < v[mid]){ high = mid + 1; }else if(x > v[mid]){ low = mid + 1; }else{ return mid; } printf("mid is %d\n",mid); } return -1; } int main(void) { int v[] = {2,3,4,7,8,23,54,65,76}; int ret = binsearch(7, v, sizeof(v)/sizeof(int)); printf("%d,ret is %d\n", sizeof(v),ret); return 0; }
Run Code Online (Sandbox Code Playgroud)

编译并运行它,结果是死循环!所以行"low = mid + 1;" …

c

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

这个语法在c ++中意味着什么

我在C++源代码中看到了类似下面的代码:

size_t s1, s2 = sizeof(int), s3;
Run Code Online (Sandbox Code Playgroud)

这是什么意思?抱歉天真的问题.

c++

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