最近,我写了一些代码来比较像这样的指针:
if(p1+len < p2)
Run Code Online (Sandbox Code Playgroud)
但是,有些工作人员说我应该这样写:
if(p2-p1 > len)
Run Code Online (Sandbox Code Playgroud)
为了安全起见.这里,p1和p2是char *
指针,len是整数.我对此一无所知.是吗?
EDIT1:当然,p1和p2在乞讨时指向同一个内存对象.
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) 我看到一些代码片段如下:
std::unique_ptr<uint8_t> mCache;
mCache.reset(new uint8_t[size]);
Run Code Online (Sandbox Code Playgroud)
有人告诉我这个代码有一些问题.谁能给我一些细节?
我的代码是这样的:
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) 我正在学习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)
里奇是什么意思?
像这样的代码,在第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++源代码中看到了类似下面的代码:
size_t s1, s2 = sizeof(int), s3;
Run Code Online (Sandbox Code Playgroud)
这是什么意思?抱歉天真的问题.