在%d之后使用带有空格的scanf(“%d”)

今天在我的c类中我遇到了scanf()命令,我们只是学习指针而且我们得到了一个问题,要求我们得到一个数组,然后在没有使用[]的情况下将其打印出来,除了声明(int)数组。 当然,这似乎是一块蛋糕,但不是你不小心写的时候: scanf(“%d”,arr + i); 您是否注意到%d后的空格? 当然确实花了我一段时间来弄明白但是由于某些原因导致循环变得疯狂,我希望你们帮助我(和我的老师)弄清楚为什么会这样。 例: #include #define LEN 10 void arrayInput(int * arr, unsigned int len); void arrayReverseOutput(int * arr, unsigned int len); int main(void) { int arr[LEN] = { 0 }; arrayInput(arr, LEN); arrayReverseOutput(arr, LEN); system(“pause”); return 0; } void arrayInput(int * arr, unsigned int len) { unsigned int i = […]

快速跨平台C / C ++图像处理库

什么是用于图像处理的一些跨平台和高性能图像库(resize和查找颜色/色调直方图)。 不需要gui。 这适用于C / C ++。 到目前为止,我一直在寻找 OpenCV的 GIL是Boost的一部分 魔鬼 CIMG 我的问题 我上面列出的那些表现如何 还有什么其他的图书馆 您的意见非常感谢。

修改字符串文字

为什么我运行这个程序时没有输出。 #include int main() { char* t=”C++”; t[1]=’p’; t[2]=’p’; printf(“%s”,t); return 0; }

稳定标准库qsort?

我假设stdlib中的旧的qsort函数不稳定,因为手册页没有说明任何内容。 这是我正在谈论的function: #include void qsort(void *base, size_t nmemb, size_t size, int(*compar)(const void *, const void *)); 我假设如果我改变我的比较函数也包括我正在比较的地址,它将是稳定的。 那是对的吗? 例如: int compareFoos( const void* pA, const void *pB ) { Foo *pFooA = (Foo*) pA; Foo *pFooB = (Foo*) pB; if( pFooA->id id ) { return -1; } else if( pFooA->id > pFooB->id ) { return […]

具有lld,ld和d类型标识符的size_t变量的printf

我写了这个小代码: #include int main() { size_t temp; temp = 100; printf(“lld=%lld, ld=%ld, u=%u\n”, temp, temp, temp); return 0; } 我在带有gcc版本4.1.1 20070105(Red Hat 4.1.1-52)的i386 GNU / Linux机器上运行它。 这是我得到的输出: lld=429496729700, ld=100, u=7993461 我可以理解第一个( lld )被打印为垃圾,因为当变量temp只有4个字节可用时, printf尝试打印8个字节(对于lld所表示的有signed long long )。 但是,我无法理解为什么最后一个标识符, u被打印为垃圾 – 而在我的理解中,这是size_t最接近的适用标识符。 这里我假设size_t是unsigned int (我的i386为4字节签名)。 现在,我用printf线做了一些调整: … printf(“ld=%ld, u=%u, lld=%lld\n”, temp, temp, temp); … 我有一个非常好的答案(除了lld部分)。 ld=100, […]

链表反递

我正在查看斯坦福图书馆的以下代码: void recursiveReverse(struct node** head_ref) { struct node* first; struct node* rest; /* empty list */ if (*head_ref == NULL) return; /* suppose first = {1, 2, 3}, rest = {2, 3} */ first = *head_ref; rest = first->next; /* List has only one node */ if (rest == NULL) return; /* put the first […]

c99转到过去的初始化

在调试崩溃时,我在一些代码中遇到了这个问题: int func() { char *p1 = malloc(…); if (p1 == NULL) goto err_exit; char *p2 = malloc(…); if (p2 == NULL) goto err_exit; … err_exit: free(p2); free(p1); return -1; } 第一个malloc失败时会出现此问题。 因为我们跳过p2的初始化,它包含随机数据,并且对free(p2)的调用可能会崩溃。 我希望/希望这将与C ++中的方式相同,其中编译器不允许goto跳过初始化。 我的问题:是跳过标准允许的初始化还是这是gcc实现c99的错误?

使用printf打印出浮动值

#include #include int main(void) { int x, *ptr_x; float f , *ptr_f; ptr_f = &f; ptr_x = &x; *ptr_x = 5; *ptr_f = 1.5; //printf(“%d %f\n”, f,x); printf (“\n\nxd = %d \t xf = %f \n ff = %f \t fd = %d”, x,x,f,f); return 0; } ff =%f的输出不是预期的。 xd = 5 xf = 0.000000 […]

switch case:error:case标签不会减少为整数常量

int value; const int signalmin = some_function(); switch(value) { case signalmin: break; } 我读取some_function的值并使用该int值来执行切换案例。 C99编译器回馈: 错误:case标签不会减少为整数常量 但是我不能使用#define,因为在交换机执行之前正在读取int值。

函数返回C中局部变量错误的地址

我有以下代码: char* gen() { char out[256]; sprintf(out, …); // you don’t need to know what’s in here I don’t think return out; } 当我尝试编译时,我收到此错误: ERROR: function returns address of local variable 我试过这个返回char[]和char没有运气。 我错过了什么吗?