小编J..*_*..S的帖子

C 中内置函数的函数定义

我们stdio.h在 C 程序中包含头文件以使用内置库函数。我曾经认为这些头文件包含我们可能在程序中使用的内置函数的函数定义。但很快就发现并非如此。

当我们打开这些头文件(例如 stdio.h)时,它只有函数原型,我在那里看不到任何函数定义。我看到这样的事情:

00133 int     _EXFUN(printf, (const char *, ...));
00134 int     _EXFUN(scanf, (const char *, ...));
00135 int     _EXFUN(sscanf, (const char *, const char *, ...));
00136 int     _EXFUN(vfprintf, (FILE *, const char *, __VALIST));
00137 int     _EXFUN(vprintf, (const char *, __VALIST));
00138 int     _EXFUN(vsprintf, (char *, const char *, __VALIST));
00139 int     _EXFUN(vsnprintf, (char *, size_t, const char *, __VALIST));
00140 int     _EXFUN(fgetc, (FILE *));
00141 char *  _EXFUN(fgets, (char *, int, FILE *)); …
Run Code Online (Sandbox Code Playgroud)

c gcc built-in function-definition

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

不使用数组打印相邻数字的差异

我最近发现了一个C拼图来编写一个程序来读取一组整数x 0,x 1,x 2,...... 直到a -1输入为输入..

阅读后-1,程序应打印每个相邻数字之间的差异.即,x 1 -x 0,x 2 -x 1,x 3 -x 2,......

例如:输入:
1 2 4 7 11 -1

产量
1 2 3 4

输出是(2-1),(4-2),(7-4),(11-7)的结果

问题是程序不应该使用数组.即使动态分配的数组也不行.

我尝试了很多,这是我带来的

#include<stdio.h>

int a, b;
int fn()
{
    int r=b-a;
    a=b;
    scanf("%d", &b);
    if(b!=-1)
    {
        printf("%d ", fn());
    }
    return r;
}

int main()
{
    scanf("%d%d", &a, &b);
    printf("%d ", fn() );
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

上面的程序使用递归函数,但在这种方法中,因为它就像一个堆栈,所以最后打印的值是先打印的,而不是首先打印的值.

即,与上述相同输入的输出是: 4 3 …

c gcc

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

这个字符序列 "\033[H\033[J" 在 C 中有什么作用?

我在一些随机网站中浏览了以下奇怪的字符序列。当编译和执行时,这个 Sequence 清除了终端中所有以前的内容。它是清除输出流中的缓冲区还是只清除 tty 缓冲区?

int main()
{
   printf("\033[H\033[J");
   return 0;
}
Run Code Online (Sandbox Code Playgroud)

c ansi-escape

4
推荐指数
2
解决办法
7108
查看次数

C 计算“1”的个数

我的任务是打印从 2 到 N 的所有整数(其中“1”的二进制数大于“0”)

int CountOnes(unsigned int x)
{ 
    unsigned int iPassedNumber = x; // number to be modifed
    unsigned int iOriginalNumber = iPassedNumber;
    unsigned int iNumbOfOnes = 0;

    while (iPassedNumber > 0)
    {
        iPassedNumber = iPassedNumber >> 1 << 1;  //if LSB was '1', it turns to '0'

        if (iOriginalNumber - iPassedNumber == 1) //if diffrence == 1, then we increment numb of '1'
        {
            ++iNumbOfOnes;
        }

        iOriginalNumber = iPassedNumber >> 1; //do this to operate with the …
Run Code Online (Sandbox Code Playgroud)

c binary

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

如何编写自定义printf?

我有个问题。我尝试进行自定义printf(),但是当我编译此代码时,输​​出似乎没有按预期出现。

#include <stdio.h>
#include <stdarg.h>
void print(char *, ...);

int main()
{
    char str[12]="World";
    char c='A';
    int i=100;
    print("Hello %s %c", str, c);
}

void print(char *c, ...)
{
    char *s;
    va_list lst;
    va_start(lst, c);
    while(*c!='\0')
    {
        if(*c!='%')
        {
            putchar(*c);
            c++;
            continue;
        }
        c++;
        switch(*c)
        {
        case 's': fputs(va_arg(lst, char *), stdout); break;
        case 'c': putchar(va_arg(lst, int)); break;
        }
    }    
}
Run Code Online (Sandbox Code Playgroud)

输出似乎是:Hello World 输出:Hello Worlds Ac 我不明白为什么会出现 's, c'。

c variadic-functions

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

如何获取熊猫时间序列中一个月的所有行,无论年份如何?

我正在尝试使用 pandas 数据框进行时间序列分析,发现有一些简单的方法可以选择特定的列,例如一年中的所有行、两个日期之间的行等。

例如,考虑

ind = pd.date_range('2004-01-01', '2019-08-13')
data = np.random.randn(len(ind))
df = pd.DataFrame(d, index=ind)
Run Code Online (Sandbox Code Playgroud)

在这里,我们可以选择日期“2014-01-23”和“2014-06-18”之间(包括日期)的所有行

df['2014-01-23':'2014-06-18']
Run Code Online (Sandbox Code Playgroud)

以及“2015”年的所有行

df['2015']
Run Code Online (Sandbox Code Playgroud)

是否有类似的方法来选择属于特定月份但所有年份的所有行?

我找到了使用如下语法获取特定月份和特定年份的所有行的方法

df['01-2015']  #all rows of January 2015
Run Code Online (Sandbox Code Playgroud)

我希望 pandas 能够有一种使用简单语法的方法来获取一个月的所有行,无论年份如何。这样的方式存在吗?

python time-series dataframe python-3.x pandas

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

strlen 返回 size_t?

在 C 中:
我的字符串长度函数正在返回一个size_t值?

为什么它不返回一个传统的整数?我注意到的另一件事是,当我尝试将这个字符串与另一个字符串连接起来时,我在运行程序时收到了一个总线错误。

上下文:我在玩 gmp 库并将大数字转换为字符串,最终遇到了上述情况。

那是什么样的字符串?我的操作系统是否在此问题中起作用?我使用的是 MAC 64 位操作系统。

编辑:我收到的错误消息是:

: warning: format ‘%d’ expects type ‘int’, but argument 3 has type ‘size_t’
Run Code Online (Sandbox Code Playgroud)

谢谢!

@all:感谢您的回答,但我想我会将总线错误作为另一个问题,因为它似乎是一个不同的问题。

c string strlen

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

Sysmalloc:断言

main: malloc.c:2405: sysmalloc: Assertion `(old_top == initial_top (av) && old_size == 0) || ((unsigned long) (old_size) >= MINSIZE && prev_inuse (old_top) && ((unsigned long) old_end & (pagesize - 1)) == 0)' 失败。

在尝试生成用户只能添加到头部或尾部的双向链表时,我最终在顶部收到了可爱的流产消息。

我已经使用 gdb 将其缩小到导致这种情况的功能,但我真的不知道我做错了什么。它分配第一个节点,然后,它向我抛出错误。
功能如下:

data* initD(){
    data *D = NULL;

    D = malloc(sizeof(data*));
    if (!D){
        printf("Error in allocation of data\n");
        exit(0);
    }

    D->head = NULL;
    D->tail = NULL;
    D->next = NULL;
    D->prev = NULL;
    D->val = -1;

    return D; 
}
Run Code Online (Sandbox Code Playgroud)

c linked-list

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

如果C尝试扫描整数变量中的字符会发生什么

所以我想知道如果用户在整数变量中输入字符会发生什么,例如:

main()
{

    int number;

    printf("Print a number:");
    scanf(" %d", &number);
    printf("The result is:%d", number);

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

我键入字符,结果是:1986895412

这是1986895412在公羊的一个地方吗?

c unix initialization scanf

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

在 C 中交换多维数组的子数组

我有一个 50 x 50 的矩阵arr[50][50],需要交换子数组arr[0]arr[1]. 即,每个子数组中的全部 50 个元素需要交换。

我能想到的唯一方法是使用如下循环:

for(i=0; i<50; ++i)
{
    int t = arr[0][i];
    arr[0][i] = arr[1][i];
    arr[1][i] = t;
}
Run Code Online (Sandbox Code Playgroud)

我想知道是否有更简单或更短的方法?也许使用指针?

我试过这样的事情

int *t = arr[0];
arr[0] = arr[1];
arr[1] = t;
Run Code Online (Sandbox Code Playgroud)

但它在第一行给出了关于“从类型'int *'分配给类型'int [2]'时不兼容的类型”的错误。

然后我尝试指向一个数组

int (*t)[50] = arr[0];
arr[0] = arr[1];
arr[1] = t;
Run Code Online (Sandbox Code Playgroud)

这次我在第二行遇到了关于“从类型 'int *' 分配给类型 'int[50]' 时不兼容的类型”的错误。

c arrays gcc pointers

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

如何在c/c ++中打印上标2?

我正在尝试在以下代码中打印方形标记:

代码1:

char* exp = new char[300];  
*(exp) = 178// which is 2's extended ascii code  
*(exp+1) = '\0'// end of string  
printf("%s",exp);`
Run Code Online (Sandbox Code Playgroud)

它会打印"?"


并且似乎小2将自动加入下一个字母:

代码2:

char* exp = new char[300];  
*(exp) = 178// which is 2's extended ascii code  
*(exp+1) = '4'// or anything '5' 'a' '#'...  
*(exp+2) = '\0'// end of string  
printf("%s",exp);
Run Code Online (Sandbox Code Playgroud)

它会打印一个中文单词,也可能不是,但真的很喜欢.


该怎么办?我只想打印"小2".

PS:

在WindowsXP控制台中,非常感谢您的帮助.

c++

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

有没有办法在C中传递这样的字符串?

我有一个接受字符数组(即字符串)作为参数的函数.

但是整数变量的值也应该作为字符串的一部分打印出来.

例如,如果我有这样的函数:

int var=10;
void printStr(char str[])
{
   printf("%s", str);
}
Run Code Online (Sandbox Code Playgroud)

我需要用消息打印整数变量'var'的值

"var的值是%d",var

我试过这个

printStr( ("The value of var is %d", var) );
Run Code Online (Sandbox Code Playgroud)

但它不起作用.

有没有办法在不将变量作为参数传递给它的情况下完成此操作printStr()

这种情况下的输出应该是

var的值是10

c string function parameter-passing

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

2个类似的C程序,宏生成不同的输出

以下代码不打印任何内容:

#include<stdio.h>
#define TOTAL_SIZE ( (sizeof(array))/(sizeof(array[0])) )
int main()
{
    int array[]={1,2,3}, d;
    for(d=-1; d<=TOTAL_SIZE-2; ++d)
    {
        printf("%d\n", array[d+1]);
    }
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

d = -1 <= 3-2
打印数组[-1 + 1],即数组[0]
d = 0 <= 3-2
打印数组[0 + 1],即数组[1]
d = 1 <= 3 -2
打印数组[1 + 1],即数组[2]

但即使是单个元素也不会被打印出来!



但是这段代码产生了打印数组中所有元素的正确输出:

#include<stdio.h>
#define TOTAL_SIZE ( (sizeof(array))/(sizeof(array[0])) )
int main()
{
    int array[]={1,2,3}, d;
    for(d=0; d<=TOTAL_SIZE-1; ++d)
    {
        printf("%d\n", array[d]);
    }
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

但两个循环的净效应似乎是相同的.

如果我们用TOTAL_SIZE数组中的元素数替换宏,它就可以工作.所以问题似乎与宏有关.

但是当我尝试打印生成的值时TOTAL_SIZE,它会打印正确的值.

第一个程序有什么问题?

c macros gcc

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