请考虑以下C代码段: #include int main() { int a; char c; scanf(“%d”,&a); scanf(“%c”,&c); printf(“int=%d\n”,a); printf(“char=%c\n”,c); } 我只能输入整数而不能输入字符。输出只是整数值,第二个printf语句没有输出值。 但是,如果我在格式说明符之前使用空格: scanf(” %c”,&c); 它按预期工作。 为什么会这样? 有人告诉我它与清除输入缓冲区有关。 有人会对此有所了解吗?
假设我有以下c char数组: char okaysize4[5] = “four”; // line 5 char toosmall4[4] = “four”; // line 6 char toosmall3[3] = “four”; // line 7 当我用gcc 4.4.7编译时,我收到以下错误: array.c:7:警告:chars数组的初始化字符串太长 第7行预计会出现此错误,因为我试图将5个字符(“four” + \0)填充到3个元素数组中。 第5行也不会出现错误,因为5元素数组足够大。 但是我很惊讶第6行没有类似的错误。最终在toosmall4初始化的是一个未toosmall4的字符串,这可能会导致各种麻烦。 我的理解是,由于null终止符,c字符串文字”four”应该是五个字符长。 实际上sizeof(“four”)是5.那么为什么编译器不会在这里给出错误? 有什么方法可以改变我的声明/定义/初始化,以便在这种情况下标记错误?
对于x64,我可以使用这个: { uint64_t hi, lo; // hi,lo = 64bit x 64bit multiply of c[0] and b[0] __asm__(“mulq %3\n\t” : “=d” (hi), “=a” (lo) : “%a” (c[0]), “rm” (b[0]) : “cc” ); a[0] += hi; a[1] += lo; } 但我想以可移植的方式执行相同的计算。 例如,在x86上工作。
假设有20个内存块,指针p指向第一个块。 现在,当我这样做时: p++; free(p); 将释放多少块内存,为什么?
#include #include #include char *method1(void) { static char a[4]; scanf(“%s\n”, a); return a; } int main(void) { char *h = method1(); printf(“%s\n”, h); return 0; } 当我运行上面的代码时,提示符要求我两次输入(我只在代码中使用一次scanf )。 这是为什么? (我输入’jo’;它要求更多输入,所以我再次输入’jo’。然后它只打印出’jo’一次。)
我刚刚遇到一个奇怪的问题,我正在尝试printf一个整数变量,但是我忘了指定变量名,即 printf(“%d”); 代替 printf(“%d”, integerName); 令人惊讶的是程序编译,有输出,它不是随机的。 事实上,它恰好是我想要首先打印的整数,恰好是m-1。 只要程序一直运行,错误的printf语句将始终输出m-1 …换句话说,它的行为就像语句读取一样 printf(“%d”, m-1); 谁知道这种行为背后的原因? 我在没有任何命令行选项的情况下使用g ++。 #include #define maxN 100 #define ON 1 #define OFF 0 using namespace std; void clearArray(int* array, int n); int fillArray(int* array, int m, int n); int main() { int n = -1, i, m; int array[maxN]; int found; scanf(“%d”, &n); while(n!=0) […]
我想通过像execv()这样的C语言函数执行Linux命令“pwd”。 问题是没有一个名为“pwd”的可执行文件,我无法执行“echo $ PWD”,因为echo也是一个没有可执行文件的内置命令。
我需要一些帮助来了解如何在C中使用条件变量来解决练习。 这是一个小例子: #include #include #include #include #include #include #include #include #include #include #define OKTOWRITE “/oktowrite” #define MESSAGE “/message” #define MUTEX “/lock” int main(int argc, char** argv) { pthread_cond_t* condition; pthread_mutex_t *mutex; char* message; int des_cond, des_msg, des_mutex; int mode = S_IRWXU | S_IRWXG; des_mutex = shm_open(MUTEX, O_CREAT | O_RDWR | O_TRUNC, mode); if (des_mutex < […]
可能重复: O(1)中的唯一随机数? 如何在C中填充具有唯一值(无重复项)的整数数组? int vektor[10]; for (i = 0; i < 10; i++) { vektor[i] = rand() % 100 + 1; } //No uniqueness here
我该怎么办? 有mktime函数,但是将输入视为以本地时间表示,但如果我的输入tm变量恰好是UTC,我该如何执行转换。