Mxode/CSDN-C_Language-2013_2023 huggingface dataset:
user-0 提问: 请问我这个编程的问题出在哪里？我是小白（刚接触C语言）

回复:
user: user-1
content: 我的建议 学冒泡算法的话 1.为什么要用char，不如改成int 2.楼上说的对，第一个for循环的第三个条件应该是j++

user: user-2
content: 引用 4 楼 Xdd2333333的回复:为什么我自己运行你们帮我修改后的这个程序会出现这种问题？？？能否有大佬教教我 我用的是Microsoft visual C++2010学习版 你一次输入一个数据 ，而你的输入方式已经超出了数组所能存的数据

user: user-3
content: 引用 5 楼 Xdd2333333 的回复:大佬能看一下我发在四楼的问题吗 10其实是两个字符，并且空格也是属于字符，你的数组越界了。 建议你输入的时候可以考虑这样：  9876543210  然后再试一下。  否则你的代码需要再次修改。

user: user-0
content: 大佬能看一下我发在四楼的问题吗

user: user-3
content: #include<stdio.h> #include<stdlib.h>  void f1(char s[]);  int main() {     char a[10];     printf("请输入10个数字：");     gets(a);     f1(a);     puts(a);     system("puase");      return 0; } void f1(char s[]) {     int i,j,t;     //for(j=0;j<9;i++)     for(j=0;j<9;j++)         for(i=0;i<9-j;i++)             //if (a[i]>a[i+1])             if (s[i]>s[i+1])             {                 t=s[i];                 s[i]=s[i+1];                 s[i+1]=t;             } } 供参考； 建议对比一下找到问题；

user: user-2
content: 第一个for循环第三个条件

user: user-0
content: 为什么我自己运行你们帮我修改后的这个程序会出现这种问题？？？能否有大佬教教我 我用的是Microsoft visual C++2010学习版

user: user-4
content: 顶楼上的两位。
user-0 提问: 排序

回复:
user: user-0
content: 😄😄😃😃😃😃😃😃😃

user: user-0
content: 谢谢谢谢

user: user-0
content: 感谢大神！！！！！！

user: user-1
content: 引用 2 楼 qq_44690355的回复:谢谢谢谢 不用谢。。。。。。。。。

user: user-2
content: #include <stdio.h>  void bubble_sort(int *arr, int len);  int main(void) {     int arry[4];//定义数组，存放四位整数     int i, j;      printf("请输入四位整数：");     for(i=0; i<4; i++)     {         scanf("%d", &arry[i]);     }     bubble_sort(arry, 4);      printf("从小到大输出：\n");     for(i=0; i<4; i++)     {         printf("%d ",arry[i]);     } }   void bubble_sort(int *arr, int len) {     int i, j, tmp;      for (i = 0; i < len; i++){         for(j = 0; j < len - i - 1; j++){             if(arr[j] > arr[j+1]){                 tmp = arr[j];                 arr[j] = arr[j+1];                 arr[j+1] = tmp;             }         }     } }  供参考！

user: user-1
content: #include <stdio.h>  void main(void) { 	long int arry[4];//定义数组，存放四位整数  	int i, j;  	printf("请输入四位整数："); 	for(i=0; i<4; i++) 	{ 		scanf("%ld",&arry[i]); 	} 	//冒泡循环  	for(i=0; i<4; i++){ 		for(j=0; j<3-i; j++){ 			if(arry[j]>arry[j+1]){ 				long int temp = arry[j]; 				arry[j] = arry[j+1]; 				arry[j+1] = temp;  			} 		}  	}  	printf("从小到大输出：\n"); 	for(i=0; i<4; i++) 	{ 		printf("%ld ",arry[i]); 	}	 }
user-0 提问: 求助，程序纠错，关于函数参数是指针的问题

回复:
user: user-1
content: 楼上的两种方式都是可以的。要么在main中定义int变量，然后传地址到func1中，要么就是修改func1中c的类型，传2重指针到func1中，然后在func1中malloc申请空间，这样main中就可以使用指针变量c了。  如果不对func1中的形参做任何修改，那只能用1楼的操作：main中定义普通变量，传递地址到func1中。

user: user-2
content: #include<stdio.h> #include<stdlib.h>  void func1(int *a, int *b, int **c) {//将*c改为**c 	*c = (int *)malloc(sizeof(int));//将c改为*c 	if (c == NULL) 		exit(1); 	scanf("%d", &(*a));//将&a改为&(*a) 	if (*a == *b) 		**c = (*a)*(*b);//将*c改为**c 	else 		**c = (*a) + (*b);//将*c改为**c }   int main() {	 	int a, *b, *c; 	c = NULL; 	int t = 5; 	b = &t; 	func1(&a, b, &c);//将c改为&c 	printf("结果是%d\n", *c); 	return 0; } 运行结果如下  关于指针的指针，请参考《C++中函数参数类型为指针的指针》 希望能够帮到你

user: user-3
content: #include<stdio.h> #include<stdlib.h>  void func1(int *a,int *b,int *c){     if(c==NULL)         exit(1);     scanf("%d",a);     if(*a==*b)         *c=(*a)*(*b);     else         *c=(*a)+(*b); }  int main(){     int a,*b,c;     int t=5;     b=&t;     func1(&a,b,&c);     printf("%d\n", c);     return 0; }
user-0 提问: 结构体指针作为函数参数

回复:
user: user-1
content: 查找的函数参数（形参）没有定义类型。既然函数的功能是查找，使用sort作为函数名不能做到见名知意，建议定义为search或find等等

user: user-1
content: #include<stdio.h> #include<stdlib.h>  struct iphonecard // {     int id;     int code[11]; };  int sort(struct iphonecard *card, int key) //枚举查找 key为要查的数字 {     int index;     for(index=0;index <= 10;index++)     {         if(card->code[index] == key)             return index;     }     if(index == 11)         return -1; } int main() {     int key,n;     struct iphonecard *card1;     card1 = (struct iphonecard *)malloc(sizeof(struct iphonecard));     //scanf("%d\n",&key);        scanf("%d", &key);    //去掉\n     for(n=0;n <= 10;n++)         scanf("%d",&card1->code[n]);     n = sort(card1,key);     printf("%d",n);     return 0; } 供参考

user: user-0
content: 引用 7 楼 KarivV 的回复:int sort(struct iphonecard *card, int key) 这句key前面少了参数类型int 所以在定义的时候无法识别key的参数类型  在传参的时候你传入了一个card 一个key显然 不匹配定义时的参数 另外iphonecard前面的struct 都是没必要的...  scanf("%d\n",&key);这个\n是个啥意思...如果你想吸收回车 可以  scanf("%d%*c",&key);这么写或者rewind(stdin); 另外你的sort在index==11这个条件不满足的时候没有返回值 应该在后面加一个return -2;之类的 好的 真的很谢谢您

user: user-2
content: int sort(struct iphonecard *card, int key) 这句key前面少了参数类型int 所以在定义的时候无法识别key的参数类型  在传参的时候你传入了一个card 一个key显然 不匹配定义时的参数 另外iphonecard前面的struct 都是没必要的...  scanf("%d\n",&key);这个\n是个啥意思...如果你想吸收回车 可以  scanf("%d%*c",&key);这么写或者rewind(stdin); 另外你的sort在index==11这个条件不满足的时候没有返回值 应该在后面加一个return -2;之类的

user: user-0
content: 引用 3 楼 棉猴 的回复:对于函数参数是结构体指针的情况，请参考《C++中函数参数类型为指针的指针》 希望能够帮到你 好的 谢谢您 这篇帖子里也全都是指针作为单一参数传入函数的

user: user-0
content: 引用 2 楼 自信男孩 的回复:建议贴出你的代码，以便帮你定位到问题。 谢谢您的建议 我的代码如上 谢谢

user: user-0
content: #include<stdio.h> #include<stdlib.h> struct iphonecard //  {   int id;   int code[11]; }; int sort(struct iphonecard *card,key) //枚举查找 key为要查的数字 {   int index;   for(index=0;index <= 10;index++)   { 	if(card->code[index] == key)         return index;   }   if(index == 11)     return -1; } int main() {   int key,n;   struct iphonecard *card1;   card1 = (struct iphonecard *)malloc(sizeof(struct iphonecard));    scanf("%d\n",&key);   for(n=0;n <= 10;n++)      scanf("%d",&card1->code[n]);   n = sort(card1,key);   printf("%d",n);   return 0; } 报错信息如下：  error C2061: syntax error : identifier 'key' error C2660：function does not take 2 parameters 谢谢大家！

user: user-3
content: 对于函数参数是结构体指针的情况，请参考《C++中函数参数类型为指针的指针》 希望能够帮到你

user: user-1
content: 建议贴出你的代码，以便帮你定位到问题。

user: user-0
content: 引用 10 楼 自信男孩 的回复:查找的函数参数（形参）没有定义类型。既然函数的功能是查找，使用sort作为函数名不能做到见名知意，建议定义为search或find等等 好的 谢谢您

user: user-4
content: 结构体指针作为参数和void类型还是其他类型返回值没有关系，这些都是按照程序设计需要，至于结构体指针和其他变量都可以作为形参！
user-0 提问: C语言程序中的“函数参数校验”是什么意思呢？

回复:
user: user-0
content: 嗯嗯，谢谢您的建议

user: user-1
content: 引用 2 楼 weixin_37614450 的回复:[quote=引用 1 楼 自信男孩 的回复：]就是对传进来的实参做检查。比如，  char *mystrcpy(char *dst, char *src)函数实现时，可以判断一下dst或src是否为NULL等等。谢谢您的解答，那也就是说参数校验是一种非必须的操作吧？[/quote] 对于参数判断是需要的，也建议做这项工作

user: user-0
content: 引用 1 楼 自信男孩 的回复：就是对传进来的实参做检查。比如，  char *mystrcpy(char *dst, char *src)函数实现时，可以判断一下dst或src是否为NULL等等。谢谢您的解答，那也就是说参数校验是一种非必须的操作吧？

user: user-1
content: 就是对传进来的实参做检查。比如，  char *mystrcpy(char *dst, char *src)函数实现时，可以判断一下dst或src是否为NULL等等。

user: user-0
content: 引用 5 楼 user-2 的回复：if(p==NULL) xxx 判断参数谢谢

user: user-2
content: if(p==NULL) xxx 判断参数
user-0 提问: 三位数组

回复:
user: user-1
content: 汇编层次就只有一维， 多维数组那是编译器·干的活， 若是你计算强大，直接用 byte [ ]  也可以，自己计算偏移。

user: user-2
content: 二维数组往上就是多维数组了，多维数组尽量转换成二维做出来。

user: user-1
content: 内存是线性的，即一维，   int a[100] ,   把内存看作是 100米长的线 int b[5][20],  把这 100米线剪成 5段，每段是 20米长  int c[5][2][10], 再把每段对半分。  所以同样一块内存，你可以当作 n 维， 就看你的想象力了。

user: user-1
content: 内存是线性的，即一维，    三维数组也是成线性排列。以二维数组为例，线性排列，即第一行排完排第二行，依次类推。

user: user-3
content: 了解下堆栈？

user: user-4
content: 完全看不清3333

user: user-5
content: 内存是线性的，所以，三维数组也是成线性排列。以二维数组为例，线性排列，即第一行排完排第二行，依次类推。

user: user-6
content: 您这图，真特么有意思。
user-0 提问: C语言新手关于scanf获取输入字符串的一个小问题

回复:
user: user-1
content: text本来就是一个地址，不需要用&取地址的

user: user-0
content: 谢谢您的提示，我会继续去了解一下stdin缓冲区的知识

user: user-2
content: 因为fgh不能和%d匹配。scanf是格式化输入，因此需要和对应%d, %s等等匹配才可以。

user: user-3
content: 请检查scanf的返回值。

user: user-4
content: 你可以在每个sacnf语句后printf下就明白了

user: user-4
content: 实际上执行了，后面输出的FGH表明第一次输入的数据asd fgh分别落到了三个sacnf语句中，asd落入到scanf("%s", &text)， scanf("%d",&num)寻找剩余数据中的合法数值（没找到，num仍保持原值，这里为1），后面fgh落入到第二个scanf("%s", &text)语句
user-0 提问: 如何更改这些warning，急！新手找资料找了2天了弄不出来。急求！！

回复:
user: user-1
content: for (i=0...) {      for (j = 0; j<strlen(str[i]); j++)     {          .....str[i] 改成 str[i][j]     } }  另外，不要用以下语法 uppercase = str[i][j] -= 32; 这个uppercase好像没用，意义只是返回最后一个转换大小写的字符  而且，你这个函数是转换大小写，不是转成大写吧

user: user-2
content: str[i]是一个char *类型，但是'a'是一个char或int类型。因此类型不匹配导致warning。 建议提供调用该函数的部分，尤其是实参的类型，以便更好的给你定位问题。

user: user-3
content: *str[i] >= 'A'

user: user-4
content: str[i]是个指针， 参数改成 char*  str试试

user: user-0
content: 查了很多是说没有声明，还有这个无法比较我是否应该将比较对象都改成字符串数组，然后用strcmp比较？
user-0 提问: C语言新手关于“字符串位于内存的文字常量区”的一点疑惑

回复:
user: user-1
content: 不要纠结各种常量了，这个世界上唯一不变的就是变化。用API WriteProcessMemory还能修改正运行的其它进程的内存里面的所谓常量呢！

user: user-2
content: 引用 23 楼 zhao_biaowei 的回复:个人理解，仅供参考 char * str = "hello world!"; //“hello world!"字符串存放在文字常量区，该区域是只读的。 char * array[20] = "code change the world!"; "code change the world!"字符串存放在栈区，可读写。错的 "hello world!" 和 "code change the world!" 都是 文字常量区

user: user-3
content: 个人理解，仅供参考 char * str = "hello world!"; //“hello world!"字符串存放在文字常量区，该区域是只读的。 char * array[20] = "code change the world!"; "code change the world!"字符串存放在栈区，可读写。

user: user-0
content: 引用 19 楼 m0_37198241 的回复：有C语言的编程环境吗？要是有可以调试看效果。谢谢您的建议，我回去尝试一下

user: user-0
content: 引用 17 楼 棉猴 的回复：char* p = "12345"; 	p[0] = 'a';   char ch[10] = { 0 }; 	strncpy_s(ch, p, 10); 	ch[0] = 'a'; 谢谢您的图解

user: user-4
content: 感觉你买了盗版书   退掉吧

user: user-5
content: 有C语言的编程环境吗？要是有可以调试看效果。

user: user-6
content: 字符串由于是字面量，翻译成机器码仍然不改变，所以它可能就在代码区，即代码拷贝到内存后的地方，代码区的内容不允许改变（虽然不知道汇编如何做到改变自己的）

user: user-7
content: char* p = "12345"; 	p[0] = 'a';   char ch[10] = { 0 }; 	strncpy_s(ch, p, 10); 	ch[0] = 'a';

user: user-0
content: 引用 14 楼 屈忘生 的回复：书上的这句话其实有点误导新人的意思，他其实想表达的是字符串常量和字符串数组的区别。不仅仅是C语言，任何一门计算机语言，常量都是有存储空间且不能修改的，能修改的都叫变量而不是常量了。所以楼主不要瞎琢磨这句话了，你要修改一个字符串的内容，比如你要把“bao”修改成“cao”，直接按照你理解的方式:char *a = “bao”；a[0] = 'c'；在这里a是变量，可以修改，'bao'是常量，不能修改。谢谢

user: user-0
content: 引用 12 楼 小荣－QUAN 的回复：对的，存储的区域不一样您赞同的是哪个观点？

user: user-8
content: 引用 14 楼 屈忘生的回复:书上的这句话其实有点误导新人的意思，他其实想表达的是字符串常量和字符串数组的区别。不仅仅是C语言，任何一门计算机语言，常量都是有存储空间且不能修改的，能修改的都叫变量而不是常量了。所以楼主不要瞎琢磨这句话了，你要修改一个字符串的内容，比如你要把“bao”修改成“cao”，直接按照你理解的方式:char *a = “bao”；a[0] = 'c'；在这里a是变量，可以修改，'bao'是常量，不能修改。 常量 变量，这解释直观

user: user-9
content: 书上的这句话其实有点误导新人的意思，他其实想表达的是字符串常量和字符串数组的区别。不仅仅是C语言，任何一门计算机语言，常量都是有存储空间且不能修改的，能修改的都叫变量而不是常量了。所以楼主不要瞎琢磨这句话了，你要修改一个字符串的内容，比如你要把“bao”修改成“cao”，直接按照你理解的方式:char *a = “bao”；a[0] = 'c'；在这里a是变量，可以修改，'bao'是常量，不能修改。

user: user-10
content: 对的，存储的区域不一样

user: user-0
content: 引用 8 楼 赵4老师 的回复：#pragma comment(linker,"/SECTION:.rdata,RW") //加这句可以让常量区可写，后果自负！ 666

user: user-0
content: 引用 7 楼 耕者走兔 的回复："字符串"在c语言中被当做“值”来看待。而“值”是不能被修改的。（与存储位置无关）  变量就是保存这些值的，以方便对值进行替代，用新值取代源值。（源值还在，这是你看不到了）  语言是表达思想的，不是技术规范。如果用技术规范来解释语言，无异于痴人说梦。您好，谢谢您的解答。那如果我的变量改了很多次，那中间的那些修改结果都会保留吗？还是只保留最早的源值？

user: user-0
content: 引用 6 楼 自信男孩 的回复：可以举个例子来说明： char *str = "hello world"; 即不能通过str对字符串"hello world"进行写操作，因为"hello world"是字符串常量，存放在只读数据段，因此不能对其写操作，如果要修改"hello world"中所有小写'o'改成大写'O'，就需要现将其拷贝到一个字符数组里，比如char dst[32];然后在进行修改。字符数组是可读可写的。谢谢

user: user-2
content: 引用 1 楼 qwh0710 的回复:文字常量区  是改不了的，用的是const修饰的。和const 没什么关系 const 从语法层面就不允许修改了 而字符串字面量语法层面 最多是警告 修改字符串字面量属于未定义行为 有的运行环境允许修改  有的运行环境不允许修改

user: user-11
content: 可以举个例子来说明： char *str = "hello world"; 即不能通过str对字符串"hello world"进行写操作，因为"hello world"是字符串常量，存放在只读数据段，因此不能对其写操作，如果要修改"hello world"中所有小写'o'改成大写'O'，就需要现将其拷贝到一个字符数组里，比如char dst[32];然后在进行修改。字符数组是可读可写的。

user: user-1
content: #pragma comment(linker,"/SECTION:.rdata,RW") //加这句可以让常量区可写，后果自负！
user-0 提问: 求助:c语言字符串问题

回复:
user: user-1
content: 因为fir和sec都是指针，而指向的字符串都是只读的，而mystrcat是对一个字符串进行写，所以不行。而改成数组是可以出结果，是因为字符数组是可读可写的。但是你的变成数组的代码也是有问题，因为会导致数组越界，所以输出正常结果不等于一定是正确的，越界的访问是未定义的。

user: user-2
content: char *fir= "abc";     char *sec= "123"; 这种情况下，指针指向的内容是一个字符串常量，常量是不允许被修改的，所以不可以通过这个指针对字符串进行修改的操作； 即 : *(fir + i) = *（sec+i）; 是非法的； 你程序中的   *s++ = *t++  此时的模式就是   字符常量=字符常量       char fir[]= "abc";     char sec[]= "123"; 而这个情况下，数组的每一个元素表示变量，变量允许被改动，所以可以对其进行修改操作 即：*（fir+i）=*(sec+i); 是合法的； 如果满意请给个赞哦，不懂的地方可以继续问
user-0 提问: 请教大家 C 语言全局变量赋值编译报错 问题---是不是不能在函数体外赋值

回复:
user: user-1
content: 引用 6 楼 lin5161678 的回复:[quote=引用 4 楼 耕者走兔 的回复:] 1）你使用的是全局变量，这种变量是不允许初始化。 2）你的赋值方法是被禁止的。（不能被连接器识别和使用）  你可以这样做； static char×  str[3]={"aaaa","bbbbbb","cccccccc"};  但变量（str）只在该文件中有效，不能在该文件以外地方使用。全局变量当然可以初始化 而且有默认初始化 为什么会说不能初始化 不是赋值方法禁止 禁止的是语句 C语言 语句只能写在函数里面 不能写在函数外面[/quote] 我表达的意思和你完全一致，但你的表达比我清晰，谢谢。 1）具有外部链接属性变量是不能显示初始化（即程序员指定初始化） 2）文件中不能出现语句。（变量定义除外）

user: user-2
content: 引用 4 楼 耕者走兔 的回复:1）你使用的是全局变量，这种变量是不允许初始化。 2）你的赋值方法是被禁止的。（不能被连接器识别和使用）  你可以这样做； static char×  str[3]={"aaaa","bbbbbb","cccccccc"};  但变量（str）只在该文件中有效，不能在该文件以外地方使用。全局变量当然可以初始化 而且有默认初始化 为什么会说不能初始化 不是赋值方法禁止 禁止的是语句 C语言 语句只能写在函数里面 不能写在函数外面

user: user-0
content: 引用 4 楼 耕者走兔 的回复:1）你使用的是全局变量，这种变量是不允许初始化。 2）你的赋值方法是被禁止的。（不能被连接器识别和使用）  你可以这样做； static char×  str[3]={"aaaa","bbbbbb","cccccccc"};  但变量（str）只在该文件中有效，不能在该文件以外地方使用。  引用 4 楼 耕者走兔 的回复:1）你使用的是全局变量，这种变量是不允许初始化。 2）你的赋值方法是被禁止的。（不能被连接器识别和使用）  你可以这样做； static char×  str[3]={"aaaa","bbbbbb","cccccccc"};  但变量（str）只在该文件中有效，不能在该文件以外地方使用。 谢谢 ！我试试。

user: user-1
content: 1）你使用的是全局变量，这种变量是不允许初始化。 2）你的赋值方法是被禁止的。（不能被连接器识别和使用）  你可以这样做； static char×  str[3]={"aaaa","bbbbbb","cccccccc"};  但变量（str）只在该文件中有效，不能在该文件以外地方使用。

user: user-2
content: 全局不能写语句  所以 赋值语句全错     str[0] ="hello";     str[1] ="do";     str[2] ="learn"; 只能写一些声明 定义之类的东西

user: user-3
content: 赋值需要放在函数内，因为代码运行是以函数为主的。

user: user-4
content: 非定义代码要写在函数中。
user-0 提问: 用c和c++开发的五子棋程序，棋力很强，欢迎测试

回复:
user: user-1
content: 大家也可以到GitHub上关注我们的这个小项目 https://github.com/alien-wxr/SunGomoku

user: user-2
content: 测试通不过，在window7下打不开。显然没有说明运行环境以及对于环境没有做到很好的兼容，建议先解决这个问题，在重新发布一个版本。  如果代码不保密，建议上传源码

user: user-3
content: 厉害

user: user-0
content: 的确疏忽了，目前版本只能在win10环境下运行。我本人只负责引擎部分的开发，所以暂时重写上传了所有的源代码和整个工程文件。以下是下载地址：https://download.csdn.net/download/weixin_41743837/10968389

user: user-0
content: 求各位下载测试给出意见~
user-0 提问: 如何将字符串类型转换为openssl的RSA结构

回复:
user: user-1
content: 无非就是自定义的结构体，楼主已经找到了方法，openssl 中晚仔细看下几个大结构，尤其bio 基本到处都在用

user: user-2
content: 我想请问下，你的密匙字符串是带有-----BEGIN RSA PUBLIC KEY-----的开头的吗？如果没有这个开头，还能用PEM_xxx的函数去获取RSA结构吗？

user: user-0
content: 引用 4 楼 李希金 的回复:最后怎么解决的呢?我也碰到了同样的问题，对方提供的私钥是一个字符串，但是到处都找不到转成pem秘钥文件的方法（c语言实现），求指教，多谢！ 你可以使用PEM_write_bio_RSAPrivateKey试试，具体用法你需要自己看源码

user: user-3
content: 最后怎么解决的呢?我也碰到了同样的问题，对方提供的私钥是一个字符串，但是到处都找不到转成pem秘钥文件的方法（c语言实现），求指教，多谢！

user: user-0
content: 引用 2 楼 niiiloc 的回复:typedef struct RSAPrivateKeyStr 	{ 	void *reserved; 	Item version; 	Item modulus; 	Item publicExponent; 	Item privateExponent; 	Item prime[2]; 	Item exponent[2]; 	Item coefficient; 	} RSAPrivateKey;  建议网上下一份openssl开源代码瞅瞅就好了 虽然我后来已经找到了，但是还是非常感谢[img=https://forum.csdn.net/PointForum/ui/scripts/csdn/Plugin/001/face/13.gif[/img] ///1.新建BIO对象         bio = BIO_new_mem_buf(pubKey, strlen(pubKey));         if (bio == NULL) {             return iRet;         }         ///从BIO中获取公钥         if ((RSAPubKey = PEM_read_bio_RSAPublicKey(bio, NULL, NULL, NULL)) == NULL) {             BIO_free(bio);             return iRet;         }         BIO_free(bio);

user: user-4
content: typedef struct RSAPrivateKeyStr 	{ 	void *reserved; 	Item version; 	Item modulus; 	Item publicExponent; 	Item privateExponent; 	Item prime[2]; 	Item exponent[2]; 	Item coefficient; 	} RSAPrivateKey;  建议网上下一份openssl开源代码瞅瞅就好了

user: user-4
content: 你是要这个？
user-0 提问: MSYS2编译iconv-1.15，printf的中文不能显示，但fputs的中文显示

回复:
user: user-1
content: 估计是-fexec-charset参数没加

user: user-2
content: 代码的编码也很重要。我以前遇到过，搞死了。后来，每次懒得分析，就用记事本把代码另存为ansi或者utf8，此外控制台的代码页也要匹配。win下，cmd和bash默认是不同的。总之疯狂的组合，就蒙对了。

user: user-0
content: 引用 1 楼 老马何以识途 的回复:不瞭解，猜測一下，待其他高人來討論。 fprintf是基礎函數，編寫這個函數時還沒有做字符集兼容的必要。而fputs則考慮了不同字符集這個因素，因此可能有做處理。 我觉得可能就是你说的原因。 只是按说不应该有这种bug，所以有可能是我编译环境、参数忽略了什么？ 希望能找到编译过这个软件的人核实下，也希望更多的大神指导一下！先谢了！

user: user-0
content: 有没有可能找到printf和fputs的源码看看？

user: user-0
content: 有没有人编译过iconv，汉化正常吗

user: user-3
content: 不瞭解，猜測一下，待其他高人來討論。 fprintf是基礎函數，編寫這個函數時還沒有做字符集兼容的必要。而fputs則考慮了不同字符集這個因素，因此可能有做處理。
user-0 提问: make编译busybox出现如下错误，求大神解答。

回复:
user: user-1
content: 看起来你没有内核头文件。 这些定义在linux / capability.h中定义，看起来像：  #define _LINUX_CAPABILITY_VERSION_1 0x19980330 #define _LINUX_CAPABILITY_U32S_1 1  #define _LINUX_CAPABILITY_VERSION_2 0x20071026 / *已弃用 - 使用v3 * / #define _LINUX_CAPABILITY_U32S_2 2  #define _LINUX_CAPABILITY_VERSION_3 0x20080522 #define _LINUX_CAPABILITY_U32S_3 2  如果您没有内核头文件，可以使用“make menuconfig”禁用“Support capabilities”，错误将消失。
user-0 提问: 求助：请问是否有现成的用整型来表示浮点型的类？

回复:
user: user-1
content: 生成x64 release就应该不慢了。

user: user-2
content: 这个还挺难的，自己实现的话效率比语言自带的很低不少

user: user-3
content: 可以参考下float和double的实现，就是用整数来表示指数位和底数位的，自己使用int可以合理分配，如果但是不知道你的7位小数，前面还有没有整数，如果还有怕是int长度的整数满足不了你的要求
user-0 提问: 关于C语言字符串常量长度是否包含\0的疑惑

回复:
user: user-1
content: c与指针    P175  字符串长度

user: user-2
content: sizeof strlen

user: user-0
content: 引用 12 楼 柏鑫 的回复：不用纠结 面试的时候遇到了说出自己的想法就行了。字符串后面是有个\0的，只是strlen会忽略\0，计算内存大小sizeof()并不会谢谢，您说的很对，我很认同您的解释。我现在理解的是：strlen是从字符串内容的角度说的，而sizeof是从字符串存储的角度说的

user: user-0
content: 引用 11 楼 耕者走兔 的回复：第一个问题是；字符串是以第一个空字符结束的字符序列，并且包含该空字符。 第二个问题是；字符串长度是，第一个空字符前面的字符个数。 谢谢，您的解释很清晰

user: user-3
content: 不用纠结 面试的时候遇到了说出自己的想法就行了。字符串后面是有个\0的，只是strlen会忽略\0，计算内存大小sizeof()并不会

user: user-4
content: strlen及sizeof是不同的。

user: user-5
content: 第一个问题是；字符串是以第一个空字符结束的字符序列，并且包含该空字符。 第二个问题是；字符串长度是，第一个空字符前面的字符个数。

user: user-6
content: 是否含有，写个demo测试一下就知道了

user: user-7
content: 说法不一样，字符串长度和内存的大小 用strlen得到的字符串的长度，用sizeof得到的是内存的大小

user: user-8
content: "A"字符串的长度是1，如果是char str[] = "A";那么数组长度是2.

user: user-0
content: 引用 3 楼 或✘许✔吧 的回复：字符串保存在数组里面的话，后面自动加'\0' 从技术角度看，字符串常量也相当于字符数组。只要是字符数组后面一定有'\0' 而书上说的可能是说“hello girl”的长度为10。可能就是想告诉读者空格也算一个字符并没有考虑到存储的时候的实际长度 其实这个不用太纠结与书上的，问字符数组长度，就加一我明白您的意思了，谢谢

user: user-0
content: 引用 1 楼 自信男孩 的回复："A"字符串的长度是1，如果是char str[] = "A";那么数组长度是2.谢谢

user: user-0
content: 引用 5 楼 lin5161678 的回复：[quote=引用 4 楼 niiiloc 的回复:] C99标准的规定，'a'叫做整型字符常量(integer character constant)，被看成是int型，所以在32位机器上占4字节。 ISO C++标准规定，'a'叫做字符字面量(character literal)，被看成是char型，所以占1字节。  楼主你可以测试下，C语言中sizeof('A')确实是4你看错问题了 答主的疑问和 'A' 没什么关系 问的是 "A"[/quote]谢谢

user: user-9
content: 引用 4 楼 niiiloc 的回复:C99标准的规定，'a'叫做整型字符常量(integer character constant)，被看成是int型，所以在32位机器上占4字节。 ISO C++标准规定，'a'叫做字符字面量(character literal)，被看成是char型，所以占1字节。  楼主你可以测试下，C语言中sizeof('A')确实是4你看错问题了 答主的疑问和 'A' 没什么关系 问的是 "A"

user: user-10
content: C99标准的规定，'a'叫做整型字符常量(integer character constant)，被看成是int型，所以在32位机器上占4字节。 ISO C++标准规定，'a'叫做字符字面量(character literal)，被看成是char型，所以占1字节。  楼主你可以测试下，C语言中sizeof('A')确实是4

user: user-11
content: 字符串保存在数组里面的话，后面自动加'\0' 从技术角度看，字符串常量也相当于字符数组。只要是字符数组后面一定有'\0' 而书上说的可能是说“hello girl”的长度为10。可能就是想告诉读者空格也算一个字符并没有考虑到存储的时候的实际长度 其实这个不用太纠结与书上的，问字符数组长度，就加一
user-0 提问: 怎么能获取窗口标题里的内容。

回复:
user: user-1
content: 路径应该不会变化吧，绝对路径和相对路径应该都可以。还有unix和linux用的路径分隔符才是/，windows用的是\。如果真的是windows就难办一点，应该清楚吧？用转义符作路径分割太。。。呃

user: user-2
content: GetWindowText

user: user-3
content: 引用 2 楼 狼二羊 的回复:[quote=引用 1 楼 xueyu人生 的回复:] 你截个图看看是什么软件，同时你是想用MFC获取软件标题？ 在c里可以用的。。在家  家里电脑没有那个软件[/quote] 只是在软件界面获取字段怕是不行吧

user: user-0
content: 引用 1 楼 xueyu人生 的回复:你截个图看看是什么软件，同时你是想用MFC获取软件标题？ 在c里可以用的。。在家  家里电脑没有那个软件

user: user-3
content: 你截个图看看是什么软件，同时你是想用MFC获取软件标题？
user-0 提问: C语言 指针问题  求大佬帮我看看 谢谢

回复:
user: user-1
content: 第三个函数p指向b就好了

user: user-2
content: 客气了

user: user-0
content: 引用 3 楼 或✘许✔吧的回复:上面是我的指针使用习惯，我把%10g也该成f了 其实你的主要问题是第三个循环跳不出指针p的地址不可能等于c的地址（因为他们根本就不是指向同一个数组，指针的比较只能是在指向同一个数组的时候才有意义，不然不可能相等）也就没有跳出条件 可以改动一下第三个调用函数就可以 如图  好的，我懂了，原来是我不等式那里错了啊，谢谢你

user: user-2
content: 上面是我的指针使用习惯，我把%10g也该成f了 其实你的主要问题是第三个循环跳不出指针p的地址不可能等于c的地址（因为他们根本就不是指向同一个数组，指针的比较只能是在指向同一个数组的时候才有意义，不然不可能相等）也就没有跳出条件 可以改动一下第三个调用函数就可以 如图

user: user-2

user: user-2
content: 额。。你的代码有点问题，我改了一下，你可以对比一下，（我理解的题意） #include <stdio.h>  void copy_arr(double *a, double *b, int c); void copy_ptr(double *a, double *b, int c); void copy_ptrs(double *a, double *b, double *c);  int main() {     double source[5] = {1.1, 2.2, 3.3, 4.4, 5.5};     double target1[5];     double target2[5];     double target3[5];     int i;      copy_arr(target1, source, 5);     copy_ptr(target2, source, 5);     copy_ptrs(target3, source, source + 5);     for(i = 0; i < 5; i++)         printf("%10f%10f%10f%10f\n", source[i], target1[i], target2[i], target3[i]);      return 0; }  void copy_arr(double *a, double *b, int c) {     int i;     for(i = 0; i < c; i++)         a[i] = b[i]; }  void copy_ptr(double *a, double *b, int c) {     double *p;     p=b;     int i;     for(i = 0; i < c; i++, p++)         a[i] = *p; }  void copy_ptrs(double *a, double *b, double *c) {     int i;     double *p;     p=b;     for(i = 0; p != c; i++, p++)         a[i]= *p; }
user-0 提问: 运行后每次输入完名字就崩溃了，麻烦大神给解答以下，万分感谢

回复:
user: user-0
content: 引用 2 楼 耕者走兔 的回复:这类故障一般是野指针造成的。  student  *stu这只是一个指针，他没有指向任何对象。  addStu(stu)你也没有为这个指针在函数内部创建对象。  谢谢，还是我的学业不精啊 ，完美解决了

user: user-1
content: 这类故障一般是野指针造成的。  student  *stu这只是一个指针，他没有指向任何对象。  addStu(stu)你也没有为这个指针在函数内部创建对象。

user: user-0
content: 我用的编译器是codeblocks
user-0 提问: GPU CUDA C 编程

回复:
user: user-0
content: 想看下相关培训班

user: user-1
content: 以前看过一本GPU高性能编程实战，然后就是在英伟达官网看说明，我也刚刚开始学习。

user: user-0
content: 沙发~~~~~
user-0 提问: 电压波动趋势判断(上升或下降)

回复:
user: user-1
content: 做下滤波去燥，应该会好一些吧。或者把这些数据点取出做下处理，求下某段区间平均值、平方差、理想化数据，然后取出你想要的区间。

user: user-2
content: 做滤波看看曲线怎样的

user: user-3
content: 搜“低通滤波”
user-0 提问: C语言表达式

回复:
user: user-1
content: （+a）该运算符是为了和（-a）对应而虚设的运算符，无现实用途。  该运算符必须是算数类型，操作结果是该操作数的值。如果操作数是整数类型则进行类型提升，结果为提升后的类型值。（但我没有看到有编译器支持这一点）

user: user-2
content: 引用 7 楼 耕者走兔 的回复:（+a）该运算符是为了和（-a）对应而虚设的运算符，无现实用途。  该运算符必须是算数类型，操作结果是该操作数的值。如果操作数是整数类型则进行类型提升，结果为提升后的类型值。（但我没有看到有编译器支持这一点）   char ch = 0; sizeof ch 和 sizeof +ch 看看

user: user-2
content: 引用 2 楼 耕者走兔 的回复:单目运算符 取正（+），如果是一个负值他被修正为 正值       +(-1)+(-1) 还是 -1

user: user-2
content: 引用 2 楼 耕者走兔 的回复:单目运算符 取正（+），如果是一个负值他被修正为 正值       +(-1)没有这样的功能

user: user-1
content: 单目运算符 取正（+），如果是一个负值他被修正为 正值       +(-1)

user: user-2
content: -a 认不认识 +a就不认识了?

user: user-1
content: 引用 3 楼 user-2 的回复:引用 2 楼 耕者走兔 的回复:单目运算符 取正（+），如果是一个负值他被修正为 正值       +(-1)没有这样的功能 如你所言，他没有没任何作用。但当年老师就是这么教的，我也是这么学的。  但作为表达式，既不非法，也有效，不是吗？

user: user-0
content: 引用 1 楼 user-2的回复:-a 认不认识 +a就不认识了? 也对哦，经常用-号   突然出现+号还以为错了   我以为是加法运算符 加法运算符不是双目的么   我就以为是错的了
user-0 提问: 【C语言求助】如何使用正则表达式匹配C语言中的函数调用

回复:
user: user-1
content: 我觉得用“正则表达式将C语言源代码中全部函数提取出来”肯定是不够的啦。也就是糊弄下人而已。 既然这个是糊弄了，那搜索函数调用就是用\\w+\\s*(也差不多可以糊弄了。
user-0 提问: 新手求助SDK RichEdit4.1版控件设置垂直文本问题

回复:
user: user-0
content: 经过查MSDN得知，richedit控件的消息EM_SETLANGOPTIONS和EM_GETLANGOPTIONS是处理东亚文字的，查2008MSDN得知一些标志位的设置。可是还是没有解决。      下面是源程序，在VC6.0下编译通过，略微改动在vs2008下也通过，但是结果还是横排，没有效果。  case WM_CREATE:         hRichEditDll = LoadLibrary(TEXT("msftedit.dll"));        	//InitCommonControls();         hRichEdit = CreateWindowEx(WS_EX_CLIENTEDGE ,TEXT("RICHEDIT50W"), NULL,          WS_CHILD | WS_VISIBLE | WS_VSCROLL | WS_HSCROLL | ES_MULTILINE | ES_NOHIDESEL | ES_VERTICAL ,          10, 10, 1000, 380, hWnd, 0, NULL, 0); 		lRichR=SendMessage(hRichEdit,EM_GETLANGOPTIONS,0,0);         SendMessage(hRichEdit,EM_SETLANGOPTIONS,0,lRichR | IMF_DUALFONT ); 		mStyle=GetWindowLong(hRichEdit,GWL_STYLE);         SetWindowLong(hRichEdit,GWL_STYLE,mStyle|ES_VERTICAL); 		UpdateWindow(hRichEdit);  这是处理WM_CREATE 消息，其余的和上面的程序一样。

user: user-0
content: 引用 1 楼 幻夢之葉 的回复:ES_VERTICAL Draws text and objects in a vertical direction. This style is available for Asian-language support only.  用过这个控件，但是不深 仅支持亚洲语言，它是如何知道是不是亚洲国家语言呢？ 有哪些参数或者函数允许设置相关的诸如区域，语言，编码的，你试试看谢谢指导，我找找看下。

user: user-0
content: 谢谢大侠指导。这个也是我困惑的地方，要说那个DLL文件，我查询了它的属性中的详细信息，是简体中文。

user: user-1
content: ES_VERTICAL Draws text and objects in a vertical direction. This style is available for Asian-language support only.  用过这个控件，但是不深 仅支持亚洲语言，它是如何知道是不是亚洲国家语言呢？ 有哪些参数或者函数允许设置相关的诸如区域，语言，编码的，你试试看
user-0 提问: cmd这是出什么问题了？

回复:
user: user-1
content: 管理员运行看看

user: user-0
content: 是本人本用户没错呀，电脑里只有这一个用户。

user: user-0
content: 引用 1 楼 老马何以识途的回复:估計跟你的環境變量有關係，脚本中試試把LANG設置成zh_CN 请问怎么设置？敲dos命令还是修改环境变量？

user: user-2
content: https://blog.csdn.net/weixin_39886407/article/details/87206034

user: user-0
content: 引用 2 楼 niiiloc 的回复:权限和用户的问题 是本人本用户没错呀，电脑里只有这一个用户。

user: user-3
content: 权限和用户的问题

user: user-4
content: 估計跟你的環境變量有關係，脚本中試試把LANG設置成zh_CN
user-0 提问: 使用C语言完成图像处理

回复:
user: user-1
content: 请说明一下，这个问题来自哪里？这样对于解答问题将很有帮助。

user: user-0
content: 我自己尝试在写第一部分，卡在temping没有办法定义了头疼
user-0 提问: 杭电oj1020为什么错啊？！！！

回复:
user: user-1
content: #include <iostream> #include <cstdio> #include <cstring>  using namespace std;  int main() {     int N;     int num[26]={0};     int zm;     cin>>N;      getchar();     //memset(num, 0, sizeof(num));     for(int i=0;i<=N-1;i++)     {         //第一次输入         while((zm = getchar()) != '\n')         {              //cout<<zm<<endl;             if (isupper(zm))                 num[zm-65]++;         }         /*for(int i=0;i<=25;i++)           {           cout<<num[i]<<endl;             }*/         //cout<<"wan";         for(int i=0;i<=25;i++)         {             if(num[i] == 0)             {                 continue;             }             else if (num[i] == 2)             {                 printf("%c", i + 65);             }             else if(num[i] != 0 && num[i] != 2)             {                 printf("%d%c",  num[i] - 1, i + 'A');             }         }         //if(i!=N-1)         cout << endl;     }  }  供参考！

user: user-2
content: 简单一点：  #include <stdio.h>  int main() {   int c = 1, p = 0, x;    scanf("%d\n", &x);   while (1)   {     if (scanf("%c", (char *)&x) == EOF) break;     if (x == p) c++;     else     {       if (p)       {         if (c > 1) printf("%d", c);         putchar(p);       }       if (x == 10) puts(""), x = 0;       c = 1, p = x;     }   }    return 0; }
user-0 提问: 整数拆分问题（用堆栈方法）   谢谢

回复:
user: user-1
content: 仅供参考：#include <stdio.h> #include <stdlib.h> void print(int res[], int num) {     static int L=0;     L++;     printf("%8d:",L);     for (int i=0;i<num;++i) {         printf(" %d", res[i]);     }     printf("\n"); } void split(int n, int m) {// n表示总数，m表示最大因子     static int res[100];// 保存结果     static int num=-1;// 当前因子下标      if (n<m || n<0 || m<1) return;     num++;     if (0==n) {// 递归终止条件，为0不可再分，直接输出         print(res,num+1);         num--;         return;     } else {         if (n==m) {// 不拆，直接输出             res[num]=m;             print(res,num+1);             num--;         } else {             // 拆分出第一个             res[num]=m;             n=n-m;              if (m>n) m = n; // 最大因子不可能大于总数              for (int i=m;i>=1;--i) {// 循环，第二个因子可以继续拆分，而且按照最大因子不同可以拆分成多个                 split(n,i);             }             num--;         }     } } void Split(int n) {     if (n<=0) return;     if (100<n) {         printf("Up to 100\n");         return;     }     for (int i=n;i>=1;--i) {         split(n, i);     } } void main(int argc,char **argv) {          if (argc<=1) Split(5);     else if (argc>=3) split(atoi(argv[1]),atoi(argv[2]));     else              Split(atoi(argv[1])); }
user-0 提问: 1014 福尔摩斯的约会

回复:
user: user-1
content: https://blog.csdn.net/LITTENg/article/details/79415984

user: user-2
content: 题目也没说清楚是否一定要位置一致啊，从题目给的用例看，位置是一致的

user: user-1
content: 我上面的回复有点问题 下面是纠正 这个例子D和E在字符串中的位置一样，你这个代码运行是正确的  这个D和E是两个字符串中相同的大写字母但是在字符串中的位置不同

user: user-1
content: 楼主的代码是把字符串位置相同的字符进行比较 这个是有问题的  比如： DUIE DNJE s&hgsfdk  d&Hyscvnm 这个例子Y和R在字符串中的位置一样，你这个代码运行是正确的 但是如果是： DHUE ODEM s&hgsfdk  d&Hyscvnm 这个Y和R是两个字符串中相同的大写字母但是在字符串中的位置不同 在你这运行就不对了
user-0 提问: 电脑上的Dev-cpp出了问题……求大佬解惑……

回复:
user: user-1
content: https://blog.csdn.net/weixin_39886407/article/details/87206034

user: user-2

user: user-3
content: 请贴代码以及具体运行情况图片，越详细越好

user: user-4
content: 需要贴代码，从你的描述来看，猜测是输入时你的处理有问题
user-0 提问: 请教宏#define  fn(i)    { (i) }  的意义

回复:
user: user-1
content: 搜一下内核的用法可以知道具体作用，现在可以盲猜一下，比如有变量a以及如下用法：fn（a）；宏替换后就是｛（a）｝；只是让CPU去内存中访问变量a，然后什么都不做，这样会引起编译器警告，但是还是有作用的，占用一个极小的时间，也就是延迟，另一个作用就是如果a是一个文件，这样做可以更新文件的最近访问时间，所以可以盲猜为延迟和更新文件时间，但是具体作用要看Linux内核

user: user-2
content: 看上去像个宏函数。
user-0 提问: 编绎 时提示  -1错误 

回复:
user: user-0
content: 衷心的感 谢楼主的帮助和支持，解决了！

user: user-1
content: 其他几个符号也像中文状态打的

user: user-1
content: 我觉得是你哪个双引号格式不符。 双引号必须是英文状态下打的才有用。我看你这像中文状态下打的。 其实你自己可以看错在哪的
user-0 提问: 取出8392每一位上的数

回复:
user: user-1
content: 因为你输出的是 num/i，还有一次计算

user: user-2
content: #include <stdio.h> int main(int argc, char *argv[]) { 	int m,n,a[99],i; 	scanf("%d",&m); 	int s,b=m; 	if(b==0){ 		s=1; 	} 	for(s=0;b!=0;s++){ 		b=b/10;  	} 	for(i=0;i<s;i++){ 		a[i]=m%10; 		m=m/10; 	} 	for(i=0;i<s;i++){ 		printf("%d ",a[i]); 	} 	printf("\n"); 	return 0; }

user: user-3
content: 楼主，可以直接使用数组存放每一个数字，代码思路如下： 1.先将8392对10求余，即buf[0]=8392%10=2；然后将8392对10整除，得到num=8392/10=839; 2.将新得到的num=839对10求余，即buf[1]=839%10=9，然后将839对10整除，得到num=839/10=83; 3.将新得到的num=83对10求余，即buf[2]=83%10=3，然后将83对10整除，得到buf[3]=num=83/10=8;  4.如果你想显示的8 3 9 2这样的正序，可以将首尾参数对换得到，这个函数很多书籍都有，也很简单 思路我写出来了，剩下的楼主可以自己参考着写，这样有助于你进步

user: user-4
content: #include <stdio.h> int main() {     int num = 8392;      while (num) {         printf("%c\t", num % 10 + '0');         num /= 10;     }      putchar(10);      return 0; }  供参考！  这个程序有一定局限性，比如负数，越界等情况没有考虑，如果需要可以在这个基础完善。

user: user-4
content: 引用 4 楼 zjq9931 的回复:给你一个适应很多位数的  #include <stdio.h> void main() { 	int num = 8392 ; 	int i ; 	char buffer[100];  	sprintf(buffer, "%d", num);  	for(i=0; buffer[i]!=0 ; i++) 	{ 		printf("%c\n", buffer[i]) ; 	} }  int表示不了100，最多用16的buffer即可。

user: user-5
content: 给你一个适应很多位数的  #include <stdio.h> void main() { 	int num = 8392 ; 	int i ; 	char buffer[100];  	sprintf(buffer, "%d", num);  	for(i=0; buffer[i]!=0 ; i++) 	{ 		printf("%c\n", buffer[i]) ; 	} }

user: user-6
content: 百分号是求余数;分号是做除法，结果只取整数，不进行四舍五入

user: user-7
content: printf("%d\n" , num/i) ; -> printf("%d\n" , (num/i) % 10) ;  num = num % i ; 去掉

user: user-8
content: num 8392  i 1000  num/i 8 num = num%i=8392%1000=392      i =1000/10=100       num/i   = 392/100=3   num = 392%100=92    i = 10  num/i = 92/10=9    num  = 92%10=2  i = 1  num/i = 2  num=2%1=0   i=1/10=0结束for循环
user-0 提问: 求助，数组指针解引用为什么要用两次**

回复:
user: user-0
content: 懂了，原来（*p）【5】定义的数组指针是二维的，我还在想他跟直接*p的区别呢

user: user-1

user: user-1
content: 定义并初始化了数组a[5] 你这里其实是定义了一个指向二维数组的指针（我是这么叫的）并把他指向一维数组a 你这里（*p1）与a等价 *p1储存的是a[0]的地址当然要用啊[0]的值要两次解引用啊· 下面这个代码是一般的指向一维数组的用法 int main() {     int a[5]={1,2,3,4,5};     int *p=&a;     printf("%d",*p);     return 0; }  当然一维数组也是可以指向二维数组的但是（*p1）[5]二维数组指针就方便一点 指向下一列就把p1++就ok
user-0 提问: 求教大佬

回复:
user: user-1
content: 加个打印很难么？

user: user-2
content: 运算中出现无效数据，许多情况会导致-nan(ind) 如0除以0，负数开平方等 参看以下博文 https://blog.csdn.net/acoolgiser/article/details/81188440  试过这个代码，do-while循环多次就会导致-nan(ind)

user: user-3
content: 建议你这样，把142行 涉及到的变量都打到日志里面，看下哪个变量有问题？
user-0 提问: C语言指针问题，新手小白求教，被绕得头晕了

回复:
user: user-1
content: 第一个是指向指针的指针

user: user-2
content: 函数指针了解下，把一个函数作为一个参数，一般用于回调函数。

user: user-3
content: （1）float (**p)(10);  //这个是否有笔误(圆括号->方括号)？感觉像指向flat f(int)的函数指针的指针，且在以参数为10调用；如果确定没有笔误是个声明，那么可以解读为p为float f(int a = 10)这样函数类型的函数指针的指针 （2）double *(*p)[10]; //p是一个指向长度为10的，存放类型为double*的数组指针（也就是p是个指针，指向一个数组，该数组长度为10，类型为double*） （3）double (*p[10])();//p是长度为10的，存放类型为double (*f)()这样的函数指针类型的指针数组（也就是p是个指针数组，该数组长度为10，类型为double (*f)()这样的函数指针） （4）int *((*p)[10]);//同(2)，[]优先级高于*，所以外层圆括号有没有是一个效果 （5）int (*(p)(int,int))(int);//p是一个void* f1(int，int)的指针函数，该指针函数返回一个指向int (*f2)(int)函数类型的指针  个人理解供参考。 一般复杂的指针定义，建议用typedef
user-0 提问: C语言

回复:
user: user-0
content: 哇哦，谢谢啦，程序可以运行了，非常感谢。

user: user-1
content: 看上去像是工程设置类型错误，应该设置为控制台类型。(win32 console application)

user: user-0
content: 我删除了第一行之后，编译时没有错误，但是组建是还是有一个错误，说是我的外部符号有一个未解决的错误，这个该怎么解决呢？

user: user-2
content: 楼上加一，删除第一行就可以了

user: user-1
content: 删除第一行就可以了。  stdafx.h 不是 c语言 必要 头文件 没有，无需包含。
user-0 提问: 设计软件界面的软件是哪个，按钮啊之类的链接到相应的函数代码

回复:
user: user-1
content: 图形用户界面（GUI）编程可以学习C++ Builder，架构先进（和C#一样拖控件），入门比较容易。  　　C++ Builder是真正的可视化的开发工具。C++ Builder可以用鼠标拖拉控件加上设置属性轻松的“设计”出一个程序的图形用户界面，利用可视的组件/控件像“搭积木”一样，以“所见即所得”的方式搭建应用程序的界面，这也是C++ Builder这个名字中Builder的概念。这样，只需要用C++语言编写业务逻辑代码，类似于DOS下文本界面编程，只要专注于实现业务逻辑功能就可以了，代码非常简洁。数据的输入和表现，都在图形用户界面，非常直观、易用。这就是RAD开发（Rapid Application Development，快速应用程序开发）。  书籍推荐： 《C++Builder 6程序设计教程（第二版）》 （陆卫忠，刘文亮　等编著 /2011-04-01 /科学出版社）（当当网） 《C++Builder 6编程实例精解》（赵明现），PDF，是数字版的，非扫描版的，里面还有一个俄罗斯方块游戏的完整实现。 《精彩C++Builder 6程序设计》（台湾 吴逸贤），里面有10几个简单小游戏的实现，可以自己看懂以后再重写，才是自己掌握的。 《C++ Builder 5高级编程实例精解》（刘滨 编著）都是较大的实用的程序。  C++ Builder书籍下载： https://pan.baidu.com/s/13n9hxwVj9ai1p5L2rQC83Q

user: user-2
content: 很多啊，MFC、QT、WPF等等，你现在要学一个界面框架
user-0 提问: printf输出遇到问题

回复:
user: user-1
content: 好久没有登录了，现在上来缺无法发帖，有人知道为什么？

user: user-2
content: 可能你和scanf搞混了，scanf是通过地址传入参数，例如int a；scanf（“%d”,&a）; 输出是变量的值，例如printf（“%d”,a）,而不是地址输出，如例如printf（“%d”,&a） 你说每次输出的整数一直是那个，多半打印的是地址

user: user-3
content: &是取地址符，printf输出带上这个就是取地址的意思，所以输出的不是值

user: user-4
content: 第一，你如果真的要学，这种问题就压根不会来论坛上问，直接就去搜索了 第二，我回的就是在告诉你两点，发帖自己都不看看图看得清看不清的，你的printf使用有问题 第三，像你这种发帖不会结贴更不可能会的人，没人有义务帮你回答问题 引用 8 楼 qq_43320728 的回复:[quote=引用 1 楼 niiiloc的回复:]自己发上来的帖子不看看的么？这图片谁看的清？ 好好网上搜搜printf怎么用的吧 直接说printf出问题不会吗?谁不会去搜[/quote]

user: user-5
content: 图片质量不错

user: user-6
content: 要输出sum的数值就改成printf("%d",sum); 要输出sum的地址就改成printf("%p",&sum);

user: user-7
content: 输出sum的地址，建议用%p，而不是%d.因为地址是一个无符号整型，即unsigned int  如果是想输出sum的值，去掉&

user: user-8
content: 你 可能把 printf 和 scanf 搞混了  #include<stdio.h> int main() {     int i, j;     scanf("%d %d", &i, &j);     printf("i=%d;j=%d", i, j);     return 0; }

user: user-9
content: 如果我看图片没看错的话，你的是printf("%d", &sum);，可这是错的，你的sum是变量，&sum是取sum变量的地址，输出的是sum的地址，printf()输出变量内容的格式是直接放变量名的，像这样，printf("%d",sum); 另外还有你的图片太模糊了，一般你可以采用截图的方式发图会更清晰

user: user-10
content: VC6的补丁包SP6 安装了没？

user: user-4
content: 自己发上来的帖子不看看的么？这图片谁看的清？ 好好网上搜搜printf怎么用的吧
user-0 提问: 新生求问

回复:
user: user-0
content: 引用 2 楼 636f6c696e 的回复:学习下怎么加调试信息吧，不然有的是苦吃谢谢

user: user-0
content: 引用 1 楼 独孤过 的回复:gets函数读入成功，返回与参数buffer相同的指针 读入过程中遇到EOF(End-of-File)或发生错误，返回NULL指针  上述错误代码是一直循环执行gets(s1)  另外，在2011年12月，ANSI采纳ISO/IEC 9899:2011标准，弃用gets函数 可以使用fgets代替，不过fgets会保留Enter键产生的字符至内存缓冲区，在Windows系统会多一个'\n'，需要手动去除，用法如下：  fgets(s1, 100, stdin); s1[strlen(s1) - 1] = '\0'; 谢谢

user: user-1
content: 学习下怎么加调试信息吧，不然有的是苦吃

user: user-2
content: gets函数读入成功，返回与参数buffer相同的指针 读入过程中遇到EOF(End-of-File)或发生错误，返回NULL指针  上述错误代码是一直循环执行gets(s1)  另外，在2011年12月，ANSI采纳ISO/IEC 9899:2011标准，弃用gets函数 可以使用fgets代替，不过fgets会保留Enter键产生的字符至内存缓冲区，在Windows系统会多一个'\n'，需要手动去除，用法如下：  fgets(s1, 100, stdin); s1[strlen(s1) - 1] = '\0';
user-0 提问: 请教C结构体与结构体指针的应用场景问题

回复:
user: user-1
content: 当需要空间大，尽量使用指针动态分配堆空间，避免直接使用局部数组，把栈空间耗尽 还有其它应用场景，慢慢会遇到

user: user-1
content: 如果在作用域结束之前，结构体变量不再使用，其空间可以回收，则可以使用变量的形式 而退出作用域之后，结构体变量仍要使用，其空间不可以回收，就使用指针动态分配变量空间 另外数组空间需要动态变化时，也使用指针动态调整空间大小 注意有分配就要有释放，避免内存泄露 有malloc分配内存空间，就要有对应的free释放内存空间

user: user-2
content: 其实这两者最大的区别，通俗讲就是作用域的区别，看你的结构体数据是否需要一直维护更新调用，如果不需要，就可以直接使用结构体

user: user-3
content: 一个例子，形参。如果传递结构体变量，传过去的实参就是一个结构大小的变量，如果传递指针，那么就是4/8个字节的变量，这样效率是不是会增加，另外，也节省了空间。

user: user-4
content: struct Stu stu用的是栈内存， malloc上是堆内存 两者最大的区别在于： 1. 栈内存的作用域仅限于函数内，函数调用结束后自动回收。而堆内存的作用域是整个进程，只要没有调用free释放，这段内存一直存在。 2. 函数栈内存空间大小限制较小，一般在xk级别；而堆内存空间大小限制就要大得多。  综上两点，如果使用场景严格在一个函数内，且所需要的内存较小的情况下，建议用栈内存；如果使用场景较大或者内存使用较大，建议用堆内存。
user-0 提问: 请问这个while循环在用scanf函数为什么达不到预期效果

回复:
user: user-1
content: 引用 8 楼 weixin_43534549的回复:do  while时whilj 打错了，想说的是do while 中while加分号，while循环时不用加

user: user-1
content: do  while时whilj

user: user-2
content: while循环的判断（）里scanf返回值要等于3才执行循环体，而似乎scanf（）会返回3这个值？

user: user-3
content: 去掉while后面的分号，否则就是一个死循环（输入正确）

user: user-0
content: 嗯(⊙_⊙)~弱弱的问一句，这个在手机上这么解贴啊？Σ( ° △ °|||)︴

user: user-0
content: 哭晕在厕所，查了大半天(╥﹏╥)

user: user-4
content: while后面有个分号啊

user: user-0
content: 嗯，我是看《c primer plus》上仿写的，也不太熟-_-||，按思路应该是输入三个float类型的数据，scanf()返回3，进入循环，但不知道那里出了错，实现不了预期功能。Ｏ(≧口≦)Ｏ

user: user-5
content: C语言不熟的表示这是什么写法T_T
user-0 提问: makefile 想将.o文件直接输出到指定的 obj目录下，碰见奇怪问题

回复:
user: user-0
content: 那正确的是咋样滴？

user: user-1
content: 引用 5 楼 happy_lin2006 的回复:问题解决了，但是不知道为什么： 后来将： $(OBJ_FILES): $(CPP_FILES)     $(CXX) $(CXXFLAGS) -c -o $@ $< 改成： $(OBJ_PATH)/%.o:%.cpp 	$(CXX) $(CXXFLAGS) -c -o $@ $<  就可以了。 不清楚这里的%.o:%.cpp   和 $(OBJ_FILES): $(CPP_FILES)什么差别？  刚看到。  %.o:%.cpp   和 $(OBJ_FILES): $(CPP_FILES)  他俩的差别在于，我是这么理解的。 第一种，%.o:%.cpp ，两者为同时赋值，进行循环。 1.o 1.cpp 2.o 2. cpp 所以，$@ $< ，这么取，可以取到每个cpp。  第二种，$(OBJ_FILES): $(CPP_FILES)。。$(CPP_FILES)就是个固定的数组， 每次取。 $<  ，只能取到$(CPP_FILES)的第一项。

user: user-0
content: 问题解决了，但是不知道为什么： 后来将： $(OBJ_FILES): $(CPP_FILES)     $(CXX) $(CXXFLAGS) -c -o $@ $< 改成： $(OBJ_PATH)/%.o:%.cpp 	$(CXX) $(CXXFLAGS) -c -o $@ $<  就可以了。 不清楚这里的%.o:%.cpp   和 $(OBJ_FILES): $(CPP_FILES)什么差别？

user: user-1
content: 额。。。抱歉，才发现，我刚才传上去的，是错误的。

user: user-1
content: $<  表示第一个依赖文件。按照你之前的写法。自然是只有 a.cpp了

user: user-1
content: 你应该这么写。  CXX    = g++  CXXFLAGS = -g -shared -fPIC -Xlinker --unresolved-symbols=ignore-in-shared-libs LDPFALGS = -lrt -lpthread # define compiling temporary dir CPP_FILES := $(wildcard *.cpp) OBJ_FILES := $(addprefix ./obj/,$(notdir $(CPP_FILES:.cpp=.o))) TARGET := test  all:$(TARGET)  %.o: $(CPP_FILES) 	$(CXX) $(CXXFLAGS) -c -o $@ $<  $(TARGET):$(OBJ_FILES) 	$(CXX) $(CXXFLAGS) -o $@ $^  clean: 	rm -rf $(OBJ_FILES)
user-0 提问: 求解！！！用c语言写了一个贪吃蛇小游戏，用的软件是code::block,调试和发布都能运行成功，可是将生成的exe文件复制到别的路径执行时蛇吃食物会闪退

回复:
user: user-1
content: gcc没有加-static编译吧。

user: user-0
content: 引用 1 楼 user-1的回复:gcc没有加-static编译吧。 嗯，编译用了下GCC -static，可惜还是会闪退，看来不是缺少组件的问题，不过我学到了原来加-static是将依赖项也一起编译，谢谢啦！其实问题我今天上午已经解决了，是我学艺不精，学c语言的内存管理没有深刻了解，所以程序里分配内存那里错了，导致添加蛇身时会闪退，总而言之，谢谢你让我学到了另一个知识点！

user: user-0
content: 嗯，编译用了下GCC -static，可惜还是会闪退，看来不是缺少组件的问题，不过我学到了原来加-static是将依赖项也一起编译，谢谢啦！其实问题我今天上午已经解决了，是我学艺不精，学c语言的内存管理没有深刻了解，所以程序里分配内存那里错了，导致添加蛇身时会闪退，总而言之，谢谢你让我学到了另一个知识点！
user-0 提问: 无法成功生成项目怎么办？    急急急

回复:
user: user-1
content: 先学会搜索，论坛提问的效率是很低的

user: user-2
content: 如果不熟悉创建项目和程序运行步骤，参看以下博文 https://blog.csdn.net/xucongyoushan/article/details/86017602 VS2010和VS2013类似，着重看项目创建和程序运行

user: user-3
content: 新建一个空白的win32控制台应用程序，把你的main函数拷贝进去

user: user-0
content: 怎么定义啊，因为刚开始学都不是很懂

user: user-2
content: 是不是未定义控制台入口main函数

user: user-0
user-0 提问: 一个堆砌分类的问题

回复:
user: user-0
content: 需求 基本思路 和应用的算法

user: user-0
content: 分数实在有点少  实在抱歉   请问各位大牛 是不是用python 比c++合适？

user: user-0
content: 机器人竞赛  遇到的问题  有点类似汉诺塔

user: user-1
content: 数学题吗？ 这是
user-0 提问: 如何用批处理实现计算机与Internet时间服务器同步？

回复:
user: user-1
content: 如果不是强制要求， 使用系统配置就可以实现时间同步 配置： 控制面板--日期和时间—更改配置 勾选  与Internet时间服务器使时间同步 下方服务器栏，输入Internet时间服务器 国家授时中心：ntp.ntsc.ac.cn
user-0 提问: 求助，牛客网的采花生题目

回复:
user: user-1
content: 题目本身就有歧义 你先找出花生最多的植株，去采摘它的花生;然后再找出剩下的植株里花生最多的，去采摘它的花生;依此类推，不过你一定要在我限定的时间内回到路边 这个策略并非一定是最优策略
user-0 提问: 蓝桥杯基础练习求大佬帮忙看看有什么错误，多谢。。。。

回复:
user: user-0
content: 引用 1 楼 niiiloc的回复:你的t1赋值逻辑有问题，存在重复+s的情况 还有，最后的结果比较用l1就可以了，为什么还要用t1去比较 对哦，谢谢大佬了。。。。

user: user-1
content: 你的t1赋值逻辑有问题，存在重复+s的情况 还有，最后的结果比较用l1就可以了，为什么还要用t1去比较
user-0 提问: 杭电oj题目及答案

回复:
user: user-1
content: 请问杭电OJ上1431用java语言做的在哪里问？

user: user-0
content: 各位大佬，请多包涵，新手上路

user: user-0
content: 不是，没弄好，本来要删的

user: user-2
content: Would you buy a used car from this man?

user: user-3
content: 是否需要考虑大数的加法

user: user-4
content: 所以 你这帖子是准备做什么? 问题解决了 代码也贴了 展示这段糟糕的代码??
user-0 提问: 结构体指针，内存分配问题请教

回复:
user: user-1
content: 我想回复一下Randolf_A,sizeof(strup_1)=8,说明系统不是64位的吗？？？？

user: user-2
content: 题主，这个问题需要考虑到内存对齐。 内存对齐有几条规则，以你定义的结构体为例，第一个元素的内存偏移从零开始： 1.变量的内存偏移是变量实际占用内存的整数倍； 2.占用的总内存需要是最大元素大小的整数倍；  实际来看，你的系统应该是32bits： 1.int类型，实际大小 4 字节，内存占用 0-3； 2.float类型，实际大小 8 字节，内存占用 8-15，规则1 3. double类型，实际大小 8 字节，内存占用16-23； 4.指针，32位系统下实际大小 4 字节，内存占用24-27； 5.指针，4字节，内存占用28-31； 6.指针，4字节，内存占用32-35； 实际来看，共计 36 字节，规则2指出，内存占用应该是8的倍数，故sizeof()输出的结果是40

user: user-3
content: 给你解释一下啊，指针和给指着开辟空间的关系，，指针呢他就是一个固定大小的变量，他这个变量呢存放的就是一个地址（这跟int i 中i存放一个int值是一个道理的），所以记住这句话指针就不难：指针就是个变量，存放的就是一个地址值，，然后地址知道了，你需要知道这个地址里面放的啥，这就好像开发楼盘，我知道在这个楼在5号大街，所以你知道去这个找这个楼，但这个地方还没建起来呢，所以他没有这个楼的。你只是知道，应该有。。这就跟你开辟空间是一个道理，你知道了楼的地址，然后你需要盖楼，楼的大小是100，你就malloc（100）的，如果小了，那就完了。这就好像你malloc（sizeof(struct Stu*)）,你只是把门牌号的大小分配出来了。但盖楼的大小需要的是sizeof(Struct Stu)，那你的楼就完蛋了。这里楼的大小就是sizeof(struct Stu)40, 楼地址的大小就是sizeof(struct stu*)也就是8，那结果可想而知，你在8大小的地方要存放40大小的楼，，，这个sizeof就是个运算符，运算符！！！他就能得出个size_t（这里你就理解成int值）的结果。也就是说，如果你能保证你的值没错而且以后不更改，那malloc(40)自己往里塞值就行了，，除非你指针用的特别好，否则不要这么做，还是sizeof吧。然后还有一点，指针这个东西是不需要分配空间的，也就是说你需要给楼分配空间，但不需要给楼的地址分配，这个解释起来比较深奥，涉及到堆栈的知识，新手就先别探讨了，总之门牌号不需要分配大小。。malloc(sizeof(struct stu*))这种情况除非特殊高手用来计算，否则是不会有的。再说说你的那个类似等式的东西，等号前面就是楼的地址，等号后面就是实际的楼，懂了吧。你可以根据楼的地址找到楼，但楼这个实体有没有，还得取决于你盖没盖，还是那句话，除非你是指针高手，就sizeof（类型）就完事了，如果是数组就sizeof(类型)* 数组的数量

user: user-0
content: 引用 6 楼 niiiloc 的回复:你的所有问题实质是对malloc理解不深刻导致 malloc的入参是申请内存的大小，出参是申请出来内存的位置，两者不要搞混了  谢谢，也就是说，要用 malloc ( sizeof( 结构体 ) ) ， 这样就申请了结构体大小的内存，然后= ，表示指针指向了这块

user: user-4
content: 首先需要了解sizeof的原理，sizeof返回类型的长度（占用内存的字节数），sizeof结构体类型，得到的是类型的大小。sizeof结构体指针是指针类型的大小，指针类型要根据系统的CPU位数，如果是32位系统，那么指针类型长度为4，若为64位系统，则是8.

user: user-5
content: 指针大小 永远 4字节(32位程序）  或8字节(64位程序)  , 仅仅一个地址而已

user: user-6
content: 如你所愿，编译器已经为你分配了你所请求的存储空间，你还有什么满意的尼。  为什么一个是 40 个字节，而另一个 8 字节？ 那是因为，你请求的就那么多，编译器没有克扣你1个字节。

user: user-0
content: 引用 1 楼 qq_40223493 的回复:sizeof函数里是类型的大小。*p和p是不同类型，没有指向空间一说，第一个结构体类型名大小40没错，第二个结构体指针类型，三四都是结构体指针类型，编译器指针类型占用八个字节。   那么，接一下问题4，继续请教下： 结构体指针分配内存，到底应该 malloc ( sizeof ( 结构体 ) ) ， 还是 malloc ( sizeof ( 结构体指针 ) )  ？？？  比如， 我应该使用 struct Stu *p = malloc(sizeof(struct Stu)) ; 还是该使用 struct Stu *p = malloc(sizeof(struct Stu*)) ;  请教下

user: user-7
content: sizeof函数里是类型的大小。*p和p是不同类型，没有指向空间一说，第一个结构体类型名大小40没错，第二个结构体指针类型，三四都是结构体指针类型，编译器指针类型占用八个字节。

user: user-8
content: 你的所有问题实质是对malloc理解不深刻导致 malloc的入参是申请内存的大小，出参是申请出来内存的位置，两者不要搞混了
user-0 提问: 外部内存使用memcpy时遇到的问题

回复:
user: user-1
content: 外部ram是外部设备映射到主存的存储地址？有没有特殊用途，比如映射为设备控制寄存器/数据寄存器有访问顺序？否则不会出现这种情况的。

user: user-2
content: 请加入printf打印调试信息，并贴出完整可运行的代码

user: user-3
content: 出现内存重叠了吧。有没有完整的代码呀。

user: user-4
content: #include <stdio.h> #include <string.h>  int main(void) {     short datatest[100];  //定义到外部ram     short datatest2[100];  //定义到外部ram     short k;      for(k=0;k<10;k++)     {         datatest2[k]=k+1;     }     memcpy(&(datatest[0]), datatest2, 10*2);      for(k=0;k<10;k++)         printf("%d ", datatest[k]);     putchar(10);      memcpy(&(datatest[1]), datatest2, 10*2);     for(k=0;k<10;k++)         printf("%d ", datatest[k]);     putchar(10);     return 0; }  如上的代码测试结果如下：  1 2 3 4 5 6 7 8 9 10  1 1 2 3 4 5 6 7 8 9   10 × 2建议改成10 * sizeof(U16)

user: user-5
content: datatest2 的地址是多少 截图看看

user: user-2
content: 两次memcpy的目的地址有很大的重叠部分，是什么原因？ 我理解最终的结果应该是 1 1 2 3 4  5 6 7 8 9 10

user: user-0
content: 图片说明错位了，第一张是第一次cpy,第二张是清空，第三张是第二次cpy，第四张是第一次赋值1~A.

user: user-0
content: 引用 4 楼 林多 的回复:出现内存重叠了吧。有没有完整的代码呀。  引用 1 楼 niiiloc 的回复:两次memcpy的目的地址有很大的重叠部分，是什么原因？ 我理解最终的结果应该是 1 1 2 3 4  5 6 7 8 9 10 引用 3 楼 自信男孩 的回复:#include <stdio.h> #include <string.h>  int main(void) {     short datatest[100];  //定义到外部ram     short datatest2[100];  //定义到外部ram     short k;      for(k=0;k<10;k++)     {         datatest2[k]=k+1;     }     memcpy(&(datatest[0]), datatest2, 10*2);      for(k=0;k<10;k++)         printf("%d ", datatest[k]);     putchar(10);      memcpy(&(datatest[1]), datatest2, 10*2);     for(k=0;k<10;k++)         printf("%d ", datatest[k]);     putchar(10);     return 0; }  如上的代码测试结果如下：  1 2 3 4 5 6 7 8 9 10  1 1 2 3 4 5 6 7 8 9   10 × 2建议改成10 * sizeof(U16)    UI16 datatest[100];  //定义到外部ram UI16 datatest2[100];  //定义到外部ram UI16 k;  	for(k=0;k<10;k++) 		datatest2[k]=k+1; 		         memcpy(&(datatest[0]),datatest2,10 * sizeof(UI16)); 	for(k=0;k<50;k++) 			datatest[k]=0;  	memcpy(&(datatest[1]),datatest2,10 * sizeof(UI16));   datatest2赋值后  第一次memcpy后的datatest数据  清空datatest的数据  第二次memcpy后的datatest数据，1和A两个值都丢失了
user-0 提问: 128字节签名后得到256字节，用RSA可以实现吗？是用2048bit的私钥对128字节消息摘要签名后得到256字节签名数据吗？

回复:
user: user-1
content: 你的前提就搞错了，摘要算法只有一个最大输出长度，一般性使用的时候都会进行截取的 引用 4 楼 xjatipanel 的回复:应用场景是这样的：对一个二进制源文件数据做签名验证，从验证的过程看是将256字节的签名数据（非base64编码数据）解密后得到128字节长度的明文aa，然后对源文件数据进行一系列操作（可以确定涉及base64编码）得到128字节长度的明文bb，然后对比aa和bb进行文件签名的验证。 这里对源文件的操作推测是先进行hash or md5之类的操作得到文件摘要信息（长度96字节？？），然后base64对摘要进行编码得到128字节明文数据，再进行RSA秘钥（1024bit还是2048bit？？）签名得到256字节。 这种推测有2个疑问点： 1、由于确定256字节签名数据解密后的长度是128字节，如果这128字节数据是base64编码数据，那么编码之前的长度应该是96字节，使用哪种hash算法可以得到96字节摘要？ 2、解密后的长度是128字节，通过rsa算法加密时，秘钥必须是2048bit才能得到签名长度为256字节的签名数据吗？  哪位大牛能帮忙看看这种情况从源文件数据到128字节明文再到256字节数据签名数据的可能实现过程是怎样的吗？

user: user-0
content: 应用场景是这样的：对一个二进制源文件数据做签名验证，从验证的过程看是将256字节的签名数据（非base64编码数据）解密后得到128字节长度的明文aa，然后对源文件数据进行一系列操作（可以确定涉及base64编码）得到128字节长度的明文bb，然后对比aa和bb进行文件签名的验证。 这里对源文件的操作推测是先进行hash or md5之类的操作得到文件摘要信息（长度96字节？？），然后base64对摘要进行编码得到128字节明文数据，再进行RSA秘钥（1024bit还是2048bit？？）签名得到256字节。 这种推测有2个疑问点： 1、由于确定256字节签名数据解密后的长度是128字节，如果这128字节数据是base64编码数据，那么编码之前的长度应该是96字节，使用哪种hash算法可以得到96字节摘要？ 2、解密后的长度是128字节，通过rsa算法加密时，秘钥必须是2048bit才能得到签名长度为256字节的签名数据吗？  哪位大牛能帮忙看看这种情况从源文件数据到128字节明文再到256字节数据签名数据的可能实现过程是怎样的吗？

user: user-0
content: 引用 2 楼 北纬22.5度的攻城狮 的回复:核心思想就是要先填充到256字节再输入，进行RSA运算，得到256字节的结果，对方拿到数据后，先解密，再去填充，最后拿到原文 要得到256字节签名数据，必须对256字节长度原文数据加密吗？

user: user-2
content: 核心思想就是要先填充到256字节再输入，进行RSA运算，得到256字节的结果，对方拿到数据后，先解密，再去填充，最后拿到原文

user: user-2
content: 建议参考下我用#CSDN#这个app发现了有技术含量的博客，小伙伴们求同去《数字签名和消息验签》, 一起来围观吧 https://blog.csdn.net/szullc/article/details/84727701
user-0 提问: 常量存储问题

回复:
user: user-0
content: 引用 2 楼 赵4老师的回复:http://edu.csdn.net/course/detail/2344 C语言指针与汇编内存地址-一.代码要素 老师你这课怎么下架了？

user: user-1
content: 这个3? 3是常数，从来不存储的啊。  最多只是个临时变量，不过数在计算机里会被存成二进制，注意下

user: user-2
content: 引用 6 楼 自信男孩 的回复:3不存储，看汇编就可以知道，它是一个立即数。  3.1415925的PI可以认为是存储在只读数据段（数据段分为只读和可读可写的两部分， Linux）纠正 3.1415926 的确会占用内存 而PI 还是不存的 预编译之后 不存在 编译器看不到PI这个符号更别说存了

user: user-2
content: 引用 6 楼 自信男孩 的回复:3不存储，看汇编就可以知道，它是一个立即数。  3.1415925的PI可以认为是存储在只读数据段（数据段分为只读和可读可写的两部分， Linux）没有  3.1415925 和 3 一样 至于PI 不存在

user: user-3
content: 3不存储，看汇编就可以知道，它是一个立即数。  3.1415925的PI可以认为是存储在只读数据段（数据段分为只读和可读可写的两部分， Linux）

user: user-4
content: PI是宏，在预编译的时候，PI会被替换成3.1415920 对于3、3.1415920这些立即数，采用立即寻址方式，在执行至相应语句时，直接用mov指令存放至变量地址，或者用mov存放至寄存器，进行运算

user: user-5
content: http://edu.csdn.net/course/detail/2344 C语言指针与汇编内存地址-一.代码要素

user: user-2
content: 不存

user: user-6
content: 存储在内存中，数据段中。。

user: user-7
content: 从反汇编的代码中可以看到，对于a=b+3这种表达式，3并没有存储在哪个寄存器中，而是直接使用，就是楼上朋友说的，立即数寻址  对于#define PI 3.14.1920 这种宏，从反汇编的代码中可以看到，是保存在内存中的
user-0 提问: 本人新手求各位大神看看代码有什么问题，蓝桥杯基础练习

回复:
user: user-0
content: 引用 3 楼 梦屿~千寻的回复:#include<stdio.h> #include<string.h> int main() { 	int m,n,i,j,x,y,tot=0; 	scanf("%d%d",&m,&n); 	int a[210][210],c[210][210]; 	int b[4400]; 	memset(c,1,sizeof(c)); 	for(i=0;i<m;i++) 	{ 		for(j=0;j<n;j++) 		{ 			scanf("%d",&a[i][j]); 		} 	} 	b[0]=a[x=0][y=0]; 	c[0][0]=0; 	while(tot<m*n-1) 	{ 		while(x+1<m&&c[x+1][y]) {b[++tot]=a[++x][y];c[x][y]=0;} 		while(y+1<n&&c[x][y+1]) {b[++tot]=a[x][++y];c[x][y]=0;} 		while(x-1>=0&&c[x-1][y]){b[++tot]=a[--x][y];c[x][y]=0;} 		while(y-1>=0&&c[x][y-1]){b[++tot]=a[x][--y];c[x][y]=0;} 	} 	for(i=0;i<m*n;i++) 	{ 		printf("%d ",b[i]); 	} 	return 0; }   代码改进了之后提交还是会有测试程序显示运行超时，能帮忙看一下还有哪些问题吗? 好吧，数组b应当是200×200=40000

user: user-0
content: #include<stdio.h> #include<string.h> int main() { 	int m,n,i,j,x,y,tot=0; 	scanf("%d%d",&m,&n); 	int a[210][210],c[210][210]; 	int b[4400]; 	memset(c,1,sizeof(c)); 	for(i=0;i<m;i++) 	{ 		for(j=0;j<n;j++) 		{ 			scanf("%d",&a[i][j]); 		} 	} 	b[0]=a[x=0][y=0]; 	c[0][0]=0; 	while(tot<m*n-1) 	{ 		while(x+1<m&&c[x+1][y]) {b[++tot]=a[++x][y];c[x][y]=0;} 		while(y+1<n&&c[x][y+1]) {b[++tot]=a[x][++y];c[x][y]=0;} 		while(x-1>=0&&c[x-1][y]){b[++tot]=a[--x][y];c[x][y]=0;} 		while(y-1>=0&&c[x][y-1]){b[++tot]=a[x][--y];c[x][y]=0;} 	} 	for(i=0;i<m*n;i++) 	{ 		printf("%d ",b[i]); 	} 	return 0; }   代码改进了之后提交还是会有测试程序显示运行超时，能帮忙看一下还有哪些问题吗?

user: user-0
content: 引用 1 楼 niiiloc的回复:死循环了 简单看了下有几个问题： 1. a[0][0]没有清零 2. 边界问题：while(tot<m*n) ->while(tot<m*n - 1) 3. m行每行n个整数，没说不能等于0，所以你的算法要调整 请问哪里造成死循环了？

user: user-1
content: 死循环了 简单看了下有几个问题： 1. a[0][0]没有清零 2. 边界问题：while(tot<m*n) ->while(tot<m*n - 1) 3. m行每行n个整数，没说不能等于0，所以你的算法要调整
user-0 提问: socket connect成功后，从新连网后数据发着发着socket就不通了

回复:
user: user-1
content: 使用下列函数显示收发的每个字节值，脑查问题：void HexDump(char *buf,int len,int addr) {     int i,j,k;     char binstr[80];      for (i=0;i<len;i++) {         if (0==(i%16)) {             sprintf(binstr,"%08x -",i+addr);             sprintf(binstr,"%s %02x",binstr,(unsigned char)buf[i]);         } else if (15==(i%16)) {             sprintf(binstr,"%s %02x",binstr,(unsigned char)buf[i]);             sprintf(binstr,"%s  ",binstr);             for (j=i-15;j<=i;j++) {                 sprintf(binstr,"%s%c",binstr,('!'<buf[j]&&buf[j]<='~')?buf[j]:'.');             }             printf("%s\n",binstr);         } else {             sprintf(binstr,"%s %02x",binstr,(unsigned char)buf[i]);         }     }     if (0!=(i%16)) {         k=16-(i%16);         for (j=0;j<k;j++) {             sprintf(binstr,"%s   ",binstr);         }         sprintf(binstr,"%s  ",binstr);         k=16-k;         for (j=i-k;j<i;j++) {             sprintf(binstr,"%s%c",binstr,('!'<buf[j]&&buf[j]<='~')?buf[j]:'.');         }         printf("%s\n",binstr);     } }

user: user-0
content: 求帮忙解答一哈
user-0 提问: gcc内联汇编如何写中断调用？

回复:
user: user-1
content: https://blog.csdn.net/cxsmarkchan/article/details/50939769

user: user-1
content: 在DosBox环境下，运行mouse.com或者mouse.exe安装int 33h鼠标中断后，用BC，使用 asm 嵌入汇编。应该可以。 在Linux下，鼠标驱动是否还使用int 33h我不了解。

user: user-0
content: 我刚刚测试了asm("mov $4,%%ax": :)编译通过，但鼠标仍然没有一点反应，您知道是怎么回事吗？

user: user-0
content: 赵老师，我想调用0x33号鼠标中断，asm("int $0x33")编译通过，但鼠标一点反应都没有，设置ax（eax也试了）的用的是register int ax asm("%ax")=4。没效果，于是我试了用mov给ax赋值，但我试了很多种方法都不行，您链接里的这个也编译不通过。