小编Dav*_*eri的帖子

如何通过C程序打印127到160的扩展ASCII字符?

我正在尝试下面的代码来打印所有的ASCII字符,但它不打印任何127到160.我知道它们是控制字符集或一些拉丁/西班牙字符.如果从Windows复制粘贴相同的字符,则它在unix中打印得很好.为什么不通过C程序?

#include <stdio.h>

int main()
{
    int i;
    char ch;

    for(i = 0; i < 256; i++)
    {
        printf("\n%03d %02x %02c",i ,i ,i);
    }
}
Run Code Online (Sandbox Code Playgroud)

c ascii extended-ascii

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

如何在C中清除以下PC-Lint警告?

我对以下代码有疑问:

#define NUM_DAYS 60
#define NUM_PEOPLE 30

int days[NUM_DAYS];
int people[NUM_PEOPLE];

int size;

size = sizeof(day) > sizeof(people) ? sizeof(day) : sizeof(people);
Run Code Online (Sandbox Code Playgroud)

虽然可以将宏NUM_PEOPLE更改为大于NUM_DAYS或小于NUM_DAYS,但我收到警告: Warning 506: Constant value Boolean,如何解决?还是有其他方法可以绕过它,除了将常量变为变量?

c constants pc-lint

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

main()可以返回结构吗?

昨天在采访中有一个问题要求我main回复struct?我不知道任何人都可以告诉我是否可能,如果是,为什么?

c struct program-entry-point

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

字符串初始化数组

这段代码交换给定数组的第一个和最后一个元素:

#include <stdio.h>

/* swap first and last element of array */
void fn(void *v, size_t length, size_t size)
{
    char *a = (char *)v;
    char *b = (char *)v + size * (length - 1);
    char temp;

    do {
        temp = *a;
        *a++ = *b;
        *b++ = temp;
    } while (--size > 0);
}

int main(void)
{
    int a[] = {0, 1, 2};
    double b[] = {0., 1., 2.};
    char c[][15] = {"Hello", ",", "this is a test"};

    fn(a, …
Run Code Online (Sandbox Code Playgroud)

c arrays initialization

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

如何在套接字编程中发送长度大于缓冲区的消息?

我正在使用C++中的Winsock开发一个应用程序.我有一个200字节长的char数组,用于通过套接字发送字符串.

我的问题是当发送大于char数组的消息时,所以我决定以多个块发送它们,但我不知道该怎么做.

为了发送和接收数据,我使用常规send()和recv()功能:

recv(client, buffer, 200, NULL);
send(client, buffer, 200, NULL);
Run Code Online (Sandbox Code Playgroud)

更新

我有一个结构:

struct Pack
{
    unsigned int senderId;
    char str[200];
}
Run Code Online (Sandbox Code Playgroud)

在发送之前我转换struct为char数组.

Pack pk;
strcpy_s(pk.str, 200, "Some text to send.\0");
pk.senderId = 1 // user id
char *buffer = (char*)pk;
Run Code Online (Sandbox Code Playgroud)

如果字符串大小大于200则strcpy_s()崩溃.

c c++ sockets winsock

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

通过指向char的指针将值设置为0

我想设置(取消引用)传递变量的值,NULL如果它是a const char *,0如果它是a double,假设NULL被定义为(void *)0和sizeof(const char *) == sizeof(double),这个代码是否安全?是否有更好的方法来实现同样的目标?

如果没有,请不要建议使用unions,我坚持void *(构建一个解释器)我不能传递类型作为参数,我只需要那两种类型(const char *和double).

#include <stdio.h>
#include <string.h>

static void set0(void *param)
{
    if (sizeof(const char *) == sizeof(double)) {
        *(const char **)param = 0;
    }
}

int main(void)
{
    const char *str = "Hello";
    double num = 3.14;

    printf("%s\n", str);
    printf("%f\n", num);
    set0(&str);
    if (str != NULL) {
        printf("%s\n", …
Run Code Online (Sandbox Code Playgroud)

c pointers

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

这是有效的C扫描吗?

我知道scanf需要一个地址,但这有用吗?

int val;
int *valP = &val;
scanf("%d", valP);
Run Code Online (Sandbox Code Playgroud)

我的书只显示

int val;
scanf("%d", &val);
Run Code Online (Sandbox Code Playgroud)

有效吗?

c

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

对导致段错误的字符数组进行 qsort

在我的以下程序中,qsort 函数给出了 seg 错误,我无法理解我到底错在哪里:

#include<stdio.h>
#include<stdlib.h>
#include<string.h>

int cmpfnc (const void *a, const void *b) {
    return *(char *)a - *(char *)b;
}

int checkPermutation_sort (char *s1, char *s2) {
    int l1 = strlen(s1);
    int l2 = strlen(s2);
    if (l1 != l2) return -1;
    
    qsort(s1, l1, sizeof(char), cmpfnc);
    qsort(s2, l2, sizeof(char), cmpfnc);
    return strcmp(s1, s2);
}
int main () {
    printf("%d\n", checkPermutation_sort("abvasfa", "avbasda"));
    
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

从我尝试调试来看,这不是比较函数的错误。这是排序时内存不足的地方。但我无法理解为什么以及如何,在此处附上函数调用堆栈的屏幕截图:

函数调用栈

以下是调试器输出:

Reading symbols from a.out...
(gdb) info break

Num     Type           Disp Enb …
Run Code Online (Sandbox Code Playgroud)

c arrays segmentation-fault

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

通过voidpointer传递char*args []

她是我的简化代码:

void main(){
    void* ptr;
    char* args[3];
    args[0]="Arg1";
    args[1]="Arg2";
    args[2]="Arg3";
    ptr = &args;

    myMethod(ptr);
}
static void myMethod(void* args){

}
Run Code Online (Sandbox Code Playgroud)

我该如何转换void* args成char*[]?在myMethod(void*)?

c pointers void-pointers

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

多行表达式:C 编译器如何处理换行符?

我正在阅读有关 C 的 K&R 书的介绍部分。为了查看哪种代码格式会产生错误,我尝试分成printf("hello world!");不同的行,如下所示。问题是,我不知道我的结果是否与实现无关。我用的是GCC编译器。

C 标准对多行表达式有何规定?编译器如何处理它们?

/*
    printf("hello wor
    ld!\n");
*/

/*
    printf("hello world!
    \n");
*/

    printf("hello world!\
    n");

/*
    printf("hello world!\n
    ");
*/

    printf("hello world!\n"
    );

    printf("hello world!\n")
    ;

Run Code Online (Sandbox Code Playgroud)

注释掉的表达式会产生错误,而其余的则不会。

第三个表情的行为出乎意料。通常"需要在同一行终止,但第三个表达式可以工作。

第三个表达:

    printf("hello world!\
    n");
Run Code Online (Sandbox Code Playgroud)

输出到控制台:

hello world!    n
Run Code Online (Sandbox Code Playgroud)

似乎\可以用于将字符串拆分为多行,但前面的空格n");被包含为字符串的一部分。这是标准规则吗?

c format standards split multiline

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