c语言中的指针(如何在指针指向同一字符串中其他地方的情况下指向字符串中的第一个字符)

如果我有一个指针指向字符串中的某个地方,让我们假设它指向第三个字母(我们不知道字母的位置,基本上我们不知道它是第三个字母),我们希望它指向第一个字母,这样我们可以使字符串为空,我们怎么做 例如: 如果我们有ascii作为指针 ascii现在指向字符串中的某个地方,我希望它指向字符串的第一个字符,我该怎么做 (注: 我试着说 int len = strlen(ascii); ascii -= len; ascii = '0'; 但它不起作用,只要指针指向0,它就会改变,但不是指向0的第一个字符)

C 带字符数组的结构问题

下面是我的代码片段 struct encode { char code[MAX]; }a[10]; int main() { char x[]={'3','0','2','5','9','3','1'}; for(i=0;i<1;i++) { printf("%c",x[i]); //This will printout like 3025931 now I want this to be stored in structure.

C 每次调用都会产生不同的结果

为什么下面的代码每次运行时都不打印相同的值? 有什么是我忽略的吗?谢谢 #include <windows.h> #include <stdio.h> #include <winhttp.h> #pragma comment (lib, "winhttp") int main(void) { DWORD dwSize = 0; DWORD dwDownloaded = 0; LPSTR pszOutBuffer; BOOL bResults =

Accept()函数;C语言中的简单tcp服务器

我正在学习C语言中的socket编程&下载了一个简单的tcp服务器源文件。我了解这些函数中除第二个参数外的每一行: accept(socket_fd, (struct sockaddr *)&client, &length); bind(socket_fd, (struct sockaddr *)&server, length); accept+bind函数是“sys/types.h”和“sys/socket.h”中的典型函数,手册页将其描述为指向结构的指针,但我仍然

C 使用函数和数组

我下面的小程序将从用户那里获取5个数字,存储到 整数数组,并使用函数将其打印出来。诚然,它不起作用,而且 我的输出总是“00000”。我找不到错误,所以我很乐意接受任何建议。谢谢 #include <stdio.h> void printarray(int intarray[], int n) { int i; for(i = 0; i < n; i ++) { printf("%d", intarray[i]); } } i

C 动态数组代码不断崩溃

这是一个非常简单的C程序,我不明白它为什么会崩溃: int main () { size_t argc = 2; char **argv = malloc(argc * sizeof(char *)); for (int i = 0; i < 20; i++) { if (i >= argc) { argc *= 2; argv = realloc(argv, argc); }

当I/P大小超过5英寸C时,程序执行会发生变化

这就是问题所在 对于两个字符串A和B,我们将字符串的相似性定义为两个字符串共用的最长前缀的长度。例如,字符串“abc”和“abd”的相似性为2,而字符串“aaa”和“aaab”的相似性为3。 计算字符串S与每个后缀的相似度之和 输入: 第一行包含测试用例的数量T。接下来的每一行都包含一个字符串 输出: 输出T行,其中包含对应测试用例的答案 约束条件: 1. 毫无意义。calloc中的第二个参数是正在分配的元素的大小。该呼吁应改为: count = calloc(test_cases, sizeo

C 矩阵存取

为什么主函数中的最后一个printf没有将值10打印到屏幕上? 我知道在ANSI C中,静态分配矩阵在内存中的排列方式如下: 矩阵:矩阵[0][0]、矩阵[0][1]、…、矩阵[0][ColumnsDimension-1]、矩阵[1][0]等 #include <stdio.h> #include <stdlib.h> #define dimRighe 20 #define dimColonne 30 int main() { int matrice[dimR

%s内C-%s中的格式说明符

我有类似的东西 char string[]="My name is %s"; printf("%s",string,"Tom"); printf(string,"Tom"); 我希望输出是我的名字是Tom,但是我得到我的名字是%s 我尝试转义%字符,但它无法工作 这里怎么了?如何在%s内放置%s?试试这样的方法 char string[]="My name is %s"; printf("%s",string,"Tom"); printf(string,"Tom"); 你的方法的问题

C 为什么指针函数总是有void返回类型?

我见过许多带有指针函数的程序,它们具有void返回类型。这背后的原因是什么?void指针函数的实际需要是什么 void *print_message_function( void *ptr ){ int *message,i,j; message = (int *) ptr; if(*message == 1){ for(i=0;i<5;i++){ res1 += array[i]; } } else if(*mes

这个反向字符串代码(C)有什么问题

这是一个返回反向字符串的代码,如“ABC”返回“CBA”,但它返回这个“CBA”═²²²²ß♣Y*&s”。 怎么了 char* inv(char* C) { int lenght = strLenght(C)-1; int idx=0; char* tempStr = (char*)malloc(lenght+2); for (;lenght>=0;lenght--,idx++) { tempStr[idx] = C[lenght]

来自recvfrom的以太网标头不符合预期

我正在用C语言编写一些网络数据包嗅探代码(在以太局域网上运行)。在尝试打印以太网报头时,我遇到了一些困惑。根据协议,前8个字节由前导码和分隔符组成,下6个字节是MAC目标地址 然而,当我实际运行我的代码时,我发现从recvfrom调用中得到的字节中缺少了最初的8个字节(前导和分隔符)。换句话说,我可以从第一个字节本身开始读取目标地址 下面是代码的相关部分 char buffer[BUFFERSIZE]; struct addrinfo servinfo; servinfo.ai_family

C 快速排序运行时速度问题

我有点麻烦。我有一个快速排序算法的实现,但当我在一个包含30多个元素的整数数组上测试它时,我认为排序需要花费很长时间。有时甚至超过10秒,这与选择排序、插入排序和气泡排序不同,它们在10000个元素上比在100个元素上的快速排序更快 以下是我的解决方案,请给出建议:) void kvikSort(int a[],int l,int d){ int i,k; 如果(l>=d) 返回; k=l; 掉期(&a[l]、&a[(l+d)/2]); 对于(i=l+1;i0&&a[j]0;i--) 对于(j=

C套接字将数据附加到缓冲区已损坏

我仍在完善我的C代码技能,并在正确管理内存方面不断遇到问题——如图所示。无论如何,我是从套接字读取的,只要套接字的总响应长度不大于缓冲区大小,我就没事。我知道这一点,因为当我为传入数据增加足够大的缓冲区大小时,它对更大的有效负载工作得很好。显然,在堆栈上创建一个非常大的“以防万一”缓冲区是不可行的,所以我想在堆上动态地增加缓冲区。以下是我目前正在做的事情: raw_response = NULL; // Receive from the Web server retcode = recv(se

C 如何用我定义的错误消息替换Linux内核错误消息?

我创建了一个shell,当我给cp命令提供了错误数量的参数(例如参数不足)时,我会收到Linux shell错误消息,如键入cp fork.c将收到的消息,如下所示: mysh> cp fork.c cp: missing destination file operand after `fork.c' Try `cp --help' for more information. 我怎样才能绕过这个错误消息,像Dude那样打印我自己的错误消息!这是一个错误,消息是由cp命令生成的,而不是由内

C 将特定范围的所有UTF-8字符打印为UTF-8编码文本

我有这个代码来打印1536到1791之间的所有字符(阿拉伯语字符) #包括 void main() { int t; t=1536; 做 { printf(“%c”,t); t++; } 而(tUnicode为(某些)数字0–0x10FFFF赋予了一个含义。我们称这些具有“代码点”含义的数字及其相关含义为“字符” UTF-8是一种二进制格式,用于将Unicode字符表示为字节序列。它是一种可变长度编码,其中代码点值低于0x80的字符为一个字节,低于0x800的字符为两个字节,低于0x10000的

C 从内联ASM(X64)调用printf

我有以下代码: #include <stdio.h> #include <stdint.h> int main(void){ char *fmt = "%s"; char *s = "Hello world!\n"; //gcc -m32 test.c #ifdef __i386__ int32_t ret; __asm__ __volatile__ ( "push %1\n\t" "push %2\n\

C 接收器在滑动窗口协议中区分新旧数据包(选择性重复)

假设发送方和接收方有一个16大小的缓冲区和一个7大小的窗口 换句话说,每一方都有一个缓冲区,一个数组,可以存储16帧。每个帧都有一个适合16帧缓冲区(数组中的索引)的id。接收器有一个窗口,在任何给定的时间,只允许接受任何顺序的7帧。当缓冲区中最旧的帧被填满时,窗口将滑动一次 我现在的问题是,假设一个帧在途中丢失了,但不知何故使它返回太晚了。接收者得到它太晚了,它实际上填满了帧缓冲区的下一圈 发送方发送帧:0、1、2、3、4、5、6、7 接收机获取帧,并发送一个ACK,确认所有帧都达到7帧(或每

如何读取文本文件并检查其是否存在 #包括 #包括 #包括 #包括 #包括 无效加载(字符*文件名){ 文件*输入=fopen(文件名,“r”); 如果(输入){ printf(“:true:”); }否则{ printf(“:error:”); } fcl

如何读取文本文件并检查其是否存在 #包括 #包括 #包括 #包括 #包括 无效加载(字符*文件名){ 文件*输入=fopen(文件名,“r”); 如果(输入){ printf(“:true:”); }否则{ printf(“:error:”); } fclose(输入); } 字符*提取(字符*名称){ char*input=(char*)malloc(sizeof(char*)*100); char*extract=(char*)malloc(sizeof(char*)*100); int i

C 地址的数据大小

在c语言中,指针指向的地址包含多少数据(字节,2字节),还是取决于指向的数据类型 这是一个相当有哲理的问题,让我给你三个完全不相容的答案: 指针本身显然正好指向1个字节 根据指针的类型,指针指向数据块的第一个字节,其大小由指针类型定义 指针指向某些数据的第一个字节,其可用长度既不确定也不可从程序内部确定 虽然我认为这三个答案在技术上都是正确的,但第二个是你在C.编程时使用的答案。 编辑 有关“地址”可以、可能或应该是什么的详细信息,请查看@KeithThompson在下面评论中的输入 我不太

如何在不包含任何构建路径的情况下设置gcc RPATH?

我需要使用gcc for RHEL4构建一个wget不完整的可执行文件,该文件将使用特定的OpenSSL共享库。LD_LIBRARY_路径在生成时未设置 通过指定以下内容,这非常简单: LDFLAGS="-W1,-rpath=/usr/local/ssl/lib -L/my_build_dir/usr/local/ssl/lib" 一切都很好 但这会使我的不完整可执行文件的动态部分中出现RPATH: Library rpath: [/usr/local/ssl/lib:/my_build_di

c BST中的分段故障(堆芯转储)

在这里,我制作了一个在二叉搜索树(BST)中删除的程序,但在执行时出现了分段错误(内核转储),我认为这是在delete函数中,但不知道我是否删除了delete函数的函数调用,然后它就可以正常工作了,比如查找最大元素,按顺序遍历,但delete不会工作 #include<stdio.h> #include<stdlib.h> struct BST{ int data; struct BST *left; struct BST *right; }; s

C 常量类型不被接受为常量初始值设定项

以下(简化的)代码段会导致 error C2099: initializer is not a constant 在这段代码的最后一行: static const char rowmans_1_width = 16; ... const char rowmans_width[96] = {rowmans_1_width, rowmans_2_width, rowmans_3_width,... 所以rowmans_1_width被定义为“const”,但编译器仍然抱怨它不是常量。当我把它编译

C 如何从循环中的普通字符数组向常量字符*数组分配元素?

导致分段错误。有人能帮忙吗?我想你在找这样的东西 strcpy(otherArray[pathIndex], nextFile); pathArray[pathIndex] = otherArray[pathIndex]; seg错误的原因是没有为数组中的字符串分配任何内存 从strdup手册页: 函数的作用是:返回一个指向新字符串的指针,该字符串是字符串s的副本。新字符串的内存不足 使用malloc(3)获得,并可以使用free(3)释放 注意:您需要释放新创建的副本。很难理

c语言-以编程方式提交qsub作业

我想以编程方式在C语言的Linux上提交一个qsub作业。这是我正在使用的代码,它不起作用 char command1[50]; chdir("/home/salah/proteins/1L2Y/try2_4changes/_1/"); strcpy(command1, "qsub submit.sh"); system(command1); 当我更改命令时(比如说./test.sh),它工作得很好,可以完成所有事情。所以我认为问题出在qsub部分 错误消息是什么?您会在终端键入什么来执行作业

&引用;错误:数字常量“前应有标识符”;在生成的c文件中

我试图建立我的代码库,但我得到了错误 “错误:数字常量前应有标识符” 在生成时在生成的c文件中 行号表示rw_offsetof(struct_upthread_mutex_s,1) 我发现pthread\u mutex\s是在pthreadtypes.h中定义的 typedef union { struct __pthread_mutex_s { int __lock; unsigned int __count; int __owner;

为什么在C中有这么多不同类型的main()代码

我看到不同的人为声明main()编写不同的语句 像 我是说什么时候传论点?它需要什么?何时将int声明为返回类型,何时为void 我刚开始练习编码,当我看到人们编写不同的main()声明时,我真的感到困惑。来自C标准: 5.1.2.2.1程序启动 程序启动时调用的函数名为main。实现声明没有 此功能的原型。它应定义为int返回类型,且不包含 参数: int main(void){/*…*/} 或者使用两个参数(此处称为argc和argv,但可以使用任何名称) 已使用,因为它们在声明它们的函数中

C语言中的双指针查询

在大学里,我们执行了以下代码: int cargaArreglo(int ** A); int main(){ int * A = NULL; int i = 0; int dimension = cargaArreglo(&A); for( i = 0; i < dimension; i++ ) printf( "[%d]", A[i] ); free( A ); return 0; } int cargaArreglo(int ** A){ int i =

C 如何在另一个字符串的中间添加字符串变量?

我有一个c程序,如下所示: char* data1 = "test";//Here i have given some dummy value, the value will be evaluated in runtime char* variable1 = "<Method name=\"data1\">"; char*data1=“测试”//这里我给出了一些虚拟值,该值将在运行时进行计算 字符*变量1=“”; 我在这段代码中面临的问题是,它本身存储的是variable1的值d

为什么realloc在这种情况下不能正常工作? #包括 #包括 #包括 char*func(char*str){ 内伦; len=strlen(str)+3; str=(char*)realloc(str,len); 返回str; } void main(){ printf(“str:%s”,func(“hello”); }

最后的ans打印(null),而不是打印字符串:“hello”。谁能解释一下为什么会这样? 我无法识别任何错误。 任何人都可以纠正错误,并帮助我编写一个工作代码。求你了您可以重新定位动态分配的对象。字符串文字具有静态存储持续时间,不能更改。任何修改字符串文字的尝试都会导致未定义的行为 你能做的是以下几点 #include<stdio.h> #include<string.h> #include<stdlib.h> char *func(char * str)

C测验错误识别

愚蠢的问题,但我的教授不回复电子邮件,所以我在这里问。 我现在正在准备期末考试,我正在准备期中考试。现在,这真的很愚蠢,因为我两个月前就回答对了这个问题。但就我的一生而言,现在回想起来,我不明白为什么这是一个错误。我显然错过了一些愚蠢的事情,但我不知道是什么。请帮忙 考虑以下程序。此程序编译和运行时没有错误指示,但其输出不正确。它有一个错误。为了使程序产生正确的输出,必须更改哪一行 1 #include <stdio.h> 2 /* Find the minimum valu

释放C指针后,它不为空

释放指针后,指针的值是否变为空 int* p = malloc(sizeof(*p)); free(p); if(p==NULL) printf("Null\n"); else printf("Not null\n"); 输出: Not null 嗯,我想不是 无论如何,今天早些时候我问了一个问题: 在这里查看: 这种情况下的输出: Null 在这种情况下,释放头1(节点也)后,头1变为空,不是吗 最后,我是否遗漏了一些概念 head1为null,但p不是 我的问题

用C语言编写sentinel和struct类型的动态双链表

我试图通过使用“算法简介(第三版)”中的示例创建该列表。但我经历了一些我无法理解的困难。首先,由于printf函数在精确位置的存在,程序的工作正在发生变化。有一个地方需要printf,还有很多地方没有printf。其次,L.nil.next的值在执行与struct相关的操作的每一行代码之后都会发生变化。不幸的是,由于该值不断变化,我无法修复该程序。我会非常高兴,如果有人修复,并迫使它像一个哨兵动态双链接列表的工作 有一个密码 #include <stdio.h> #include &

检测到C堆损坏

我得到教授的帮助,用指针创建一个列表。当我尝试释放内存时,所有函数中的free()都有问题。我一直收到一个信息: “检测到堆损坏:在0x00D58CE0的正常块(#83)之后。 CRT检测到应用程序在堆缓冲区结束后写入内存。“ 我不知道如何修理它。我尝试过不同的方法,但到目前为止没有任何效果。我也不知道去哪里找它了。我知道我的程序还没有得到适当的保护,但这不会影响问题的解决。我想先把它消除,然后再继续。另外,对于在VisualStudio中检测程序内存泄漏,您有什么建议吗?以下是我的函数,完整的

使用gdb——仍然可以';找不到malloc错误

我看过以前关于这个的帖子,他们没有帮我找到我的问题。。。为了保持简短,我正在制作一个函数,它应该逐行读取文本文件(是的,我知道有很多类似的帖子)。但当我通过CMD运行程序时,它会给我以下错误: Program received signal SIGSEGV, Segmentation fault. __GI___libc_realloc (oldmem=0x10011, bytes=1) at malloc.c:2999 2999 malloc.c: No such file or dir

线端奇怪的sscanf行为

在为学校做一些项目时,我遇到了以下问题: sscanf读取的值与预期值不同 我想读这样的东西: 1 0 185336079 0 0 168231418 -256 0 255 1 2 0 185336079 -256 0 168231418 -256 0 255 2 3 0 185336079 -256 0 168231418 -256 0 255 3 4 0 185336079 0 0 0 0 0 255 4 这是我目前使用的代码: FILE *fd = open_fd("/proc/fire

在C中是否可能只有头文件而没有源文件

我想写一个快速访问的C库,只包含头文件而不使用编译库。为此,我将代码直接包含在头文件中 头文件包含: #include <stdio.h> #include <stdlib.h> #include <math.h> #ifndef INC_TEST_H_ #define INC_TEST_H_ void test(){ printf("hello\n"); } #endif #包括 #包括 #包括 #ifndef公司测试_ #定义INC_测试_

C 在终端键入“node”时运行的代码

我试图了解shebang是如何工作的,并且想知道当您在终端提示符下键入node时会发生什么。想知道它是否在某个地方调用了main。我只了解基本知识,已经使用node一段时间了。舍邦#/usr/bin/env node以某种方式读取节点可执行文件,我不确定它是什么或在哪里,以及它从什么开始。然后是实际计算表达式节点并将其指向shebang的代码,但这可能太复杂了,无法询问。非常精确地说,“shebang”只是两个字符。当Unix系统上的文件作为可执行文件调用时(最终通过系统调用),内核会查看其前几

C 在数组上下文中,int*p和int(*p)[]之间有什么区别。?

在Windows 8上使用带有TDM GCC 4.9.2的DevCpp。但我认为平台对这个问题并不重要 我知道我们可以使用指针指向单个数据或数据数组。 我已经学习了指向数组的指针,但从未使用过它。一个比另一个有什么优势 示例代码 #include <stdio.h> int main() { int x[2]={10,20}; int *p1= NULL; //simple pointer int (*p2)[] = NULL; //pointer to an

C 可以表示为浮点的最大奇数整数

我想知道什么最大的奇数整数可以精确地表示为浮点数?以及为什么在本例中表示为浮点的最大偶数整数之间存在差异 我相信这与基2指数2^n-1有关,但是我对C中的数据表示不太熟悉,看不出区别。对于IEEE-754基本32位二进制浮点,可表示的最大奇数是224−一, 对于IEEE-754基本64位二进制浮点,最大可表示奇数整数为253−一, 这是因为格式有24位和53位有效位。(有效位是浮点数的小数部分。) 有效位中的位表示的值根据浮点数的指数进行缩放。为了表示奇数,浮点数的有效位中必须有一位表示20。对

C 寻找公共素因子

我写了一个程序来寻找公素因子,最大公因子和最小公倍数。我的方法是先找到gcd,然后将gcd分解成素因子。这是我的代码: #include <stdio.h> #include <stdlib.h> int prime(int x) { int y; for (y = 2; y < x; y++) { if (x % y != 0) continue; else retu

如何将外部构建的C库链接到Ada默认运行时数学服务(sin、cos等)?

我需要使用一个外部构建的C库,在Ada程序中使用三角函数服务进行一些计算。我使用stm32 bb运行时(SFP)做得很好,但在使用默认Ada运行时的本机环境中尝试做同样的事情时,我最终会遇到链接问题。希望我能在这里找到一些帮助 我尝试了几种项目文件(gpr)解决方案的配置,结果总是出现同样的链接错误: Memory region Used Size Region Size %age Used/opt/gnat/gnat_native/bin/../libexec/gcc/x8

使用-fprofile instr生成Clang覆盖映射

我试图为Ubuntu 18.04上的一些单独编译的测试生成代码覆盖率报告,但遇到了一个奇怪的问题。如果我使用clang 5.0.0进行编译,并将-fprofile instr generate和-fcoverage mapping标志传递给它,它确实可以工作,并且运行编译的测试会导致它吐出一个.profraw文件,我可以使用llvm cov处理该文件并将其转换为覆盖率报告。但是,它似乎跟踪的唯一覆盖范围是测试线束和通过#include直接包含的任何代码,完全忽略链接的代码。例如,如果头文件通过#

C取消对不完整类型结构的指针的引用

在tree.h头中,我声明了“struct privates”以隐藏全局变量。(相关片段) struct privates; /* * a tree */ typedef struct tree_node { struct tree *left; struct tree *right; struct tree_node *left; struct tree_node *right;

如何为无法在C语言中输入0的除法问题创建输入验证

我是c语言新手,想知道如何限制用户输入0作为有效数字。我知道你可以使用if语句,但这对于一件简单的事情来说似乎太多了。因为我记得在python中,可以为用户无法输入特定数字的输入创建验证 printf("Input first number: "); scanf("%d",&num1); printf("Input the second number: "); scanf("%d",&num2); 你不能阻止,但你可以检查 do { int scanfresult

在Vim w/Syntastic上的C文件中使用NULL时出现问题

嗨 我已经使用Syntastic语法检查器插件有一段时间了,我真的很享受这种体验,除了一个恼人的bug,我似乎不知道如何消除它 每次我尝试在我的C程序中使用NULL时,我都会得到一个由红色“>”表示的错误和一个错误气泡,上面写着“使用未声明的标识符'NULL'[undefined:]” >问题的屏幕截图链接问题似乎是Syntastic没有访问stddef.h文件,因为它位于gcc文件夹(见上文)的深处,而不在/usr/include中。复制stddef.h并将其放入/usr/include似乎已

获取线程标识符C

我试图获取线程的标识符,但它总是返回一些随机数。 这里有什么不好 // C program to demonstrate working of pthread_self() #include <stdio.h> #include <stdlib.h> #include <pthread.h> void* calls(void* ptr) { // using pthread_self() get current thread id

c语言中的复sigma表示法

我试图写一个C程序来计算这个符号。我已经试了几个小时了,但我找不到我的错误。我必须使用三个函数进行组合、阶乘和功率计算。此外,我不能使用其他图书馆。 我检查了组合函数、幂函数和阶乘函数;他们没有问题。我认为问题出在for循环中。例如,当我输入5时,我必须得到100左右,但相反,我得到0.19。 这是我的密码。你能帮我找出我的错误吗?非常感谢 #include <stdio.h> int factorial(int n) { int result_fact = 1, cou

  1    2   3   4   5   6  ... 下一页 最后一页 共 3691 页