我想写一个函数minimum来返回在调用之间发送给它的最小值.该函数可以接收任意数量的参数,所有参数都是0到100范围内的整数.发送给函数的参数列表的结尾用-1表示.
例如,如果我输入以下呼叫main:
minimum (90,78,5,20,-1);
minimum (70,40,2,-1);
minimum(40,30,-1);
Run Code Online (Sandbox Code Playgroud)
第一个呼叫将返回5,因为最小值90,78,5,20为5.第二个呼叫将返回2,因为最小值5,70,40,2为2第三个呼叫将返回2,因为最小值2,40,30的值是2.
因此,该函数minimum返回到目前为止发生的所有调用中发送给它的最小数字.
所以我创建了一个静态变量,调用它min来保留函数调用之间的最小值.
这是我得到的:
#include <stdio.h>
#include <stdarg.h>
int minimum(int cnt, ...)
{
static int min;
int cur_min,i;
va_list lst;
va_start(lst,cnt);
cur_min = va_arg(lst,int);
min = cur_min;
printf("min is %d and cur min is %d \n", min, cur_min);
for(i=0; i<cnt; i++)
{
if(cur_min != -1)
{
if(cur_min < min)
{
min = cur_min;
}
cur_min = va_arg(lst,int);
printf("min is %d and cur min is %d \n" , …Run Code Online (Sandbox Code Playgroud) 这是程序:
#include <stdio.h>
#define BUF_LEN 200
#define LINE_NUMBER 3
int line_len(char* filename, int n)
{
FILE* f;
char buf[BUF_LEN];
int j, i = 0;
if ((f = fopen(filename, "r")))
{
for (j = 0; j < n; j++)
fgets(buf, BUF_LEN, f);
for (i = 0; buf[i]; i++) /* find end of buf */ ;
fclose(f);
}
return i;
}
int main()
{
printf("%d\n", line_len("test.txt", LINE_NUMBER));
return 0;
}
Run Code Online (Sandbox Code Playgroud)
根据我的理解,函数line_len接收文件的名称和我们感兴趣的行数.然后它以只读模式打开文件并迭代直到到达行n,通过每次迭代BUF_LEN-1从文件中读取字符f并存储这些人物buf.因此当第一个for循环中断时,buf …
我写了以下程序:
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
char *s;
s = (char*)malloc(15);
s = "Hello World";
printf("%s",s);
free(s);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
没有编译错误.我得到这个运行时错误: *./s'错误:munmap_chunk():指针无效:0x0000000000400694* Hello WorldAborted
为什么我会收到此运行时错误,如何解决?是因为在调用malloc之后,s收到了某个地址,并且赋值s ="Hello World"修改了s的地址,但是当执行free(s)时,发送给free的指针不是那个那是由malloc返回的?
提前致谢!