我正在尝试下面的代码来打印所有的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) 我对以下代码有疑问:
#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,如何解决?还是有其他方法可以绕过它,除了将常量变为变量?
昨天在采访中有一个问题要求我main回复struct?我不知道任何人都可以告诉我是否可能,如果是,为什么?
这段代码交换给定数组的第一个和最后一个元素:
#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++中的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()崩溃.
我想设置(取消引用)传递变量的值,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) 我知道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)
有效吗?
在我的以下程序中,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) 她是我的简化代码:
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 的 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");被包含为字符串的一部分。这是标准规则吗?