小编Tre*_*ree的帖子

不保留其值的静态变量

我想写一个函数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)

c variables static minimum retain

2
推荐指数
1
解决办法
1046
查看次数

用C打印行长度的prgram

这是程序:

#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 …

c file function line fclose

1
推荐指数
1
解决办法
85
查看次数

为什么我收到此错误以及如何解决此问题:munmap_chunk():无效指针:0x0000000000400694***Hello WorldAborted

我写了以下程序:

#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返回的?

提前致谢!

c string dynamic-memory-allocation

0
推荐指数
1
解决办法
2587
查看次数