复制字符串时出现分段错误
发布时间:2020-12-15 21:15:07 所属栏目:安全 来源:网络整理
导读:我正在尝试执行下面的代码,但是对于每次尝试我都会出现分段错误.这个问题似乎来自于令牌化中使用的strncpy函数.我对编程有点新意.请帮我调试代码.请帮忙: /* ** Program to accept a binary IP address from the command line and ** if it is a valid IP a
我正在尝试执行下面的代码,但是对于每次尝试我都会出现分段错误.这个问题似乎来自于令牌化中使用的strncpy函数.我对编程有点新意.请帮我调试代码.请帮忙:
/* ** Program to accept a binary IP address from the command line and ** if it is a valid IP address,show the user its dotted decimal form. ** Also tell the user,which class of IP address it belongs to */ #include <stdlib.h> #include <stdio.h> #include <string.h> #define TRUE 1 #define FALSE 0 int validchk(char uarg[]); int tokenize(char uarg[],char* uargv[]); int toNum(char harr[],char iparr[]); void shownum(char *iparr[]); void classify(char uarg[]); void usage(); void mystrncpy(char* arr,char* brr); int main(int argc,char *argv[]) { char* ipStr[9]; if (argc != 2) { usage(); exit(1); } if (validchk(argv[1]) == FALSE) { fprintf(stderr,"Error in the length of the IP Bit Addressn"); exit(1); } classify(argv[1]); if (tokenize(argv[1],ipStr) == -1) { perror("Error in tokenizing the binary IP addressn"); } //shownum(ipStr); return 0; } void usage() { fprintf(stderr,"Usage: bi2ip <32bitip>n"); return; } int validchk(char uarg[]) { if (strlen(uarg) != 32) { return FALSE; } } void classify(char uarg[]) { int ipcnt = 0; char *p; int doneflag = FALSE; while(ipcnt <= 4) { p = &uarg[ipcnt]; if (*p == '0') { doneflag = TRUE; break; } ipcnt++; } if (doneflag == FALSE) { fprintf(stderr,"Failed to classifyn"); exit(1); } printf("%cn",('A'+ipcnt)); return; } int tokenize(char uarg[],char* uargv[]) { int i =0,j; // for (i = 0; i <4; i++) { // strncpy(&uargv[i][0],&uarg[j],8); //strncpy(uargv[1],&uarg[8],8); //strncpy(uargv[2],&uarg[16],8); //strncpy(uargv[3],&uarg[24],8); // uargv[i][8] = ' '; // j+=8; for ( j = 0; j<8; j++) { uargv[0][j] = uarg[j]; uargv[1][j] = uarg[j+8]; uargv[2][j] = uarg[j+16]; uargv[3][j] = uarg[j+24]; } // } return 0;9 } void shownum(char *iparr[]) { int i,j; unsigned long arr[4]; for(i = 0; i<4; i++) { arr[i] = strtoul(iparr[i],NULL,2); } for ( j = 0; j < 3; j++) { printf("%lu.",arr[j]); } printf("%lu",arr[3]); } 解决方法char* ipStr[9]; 上面创建了一个包含9个字符串的数组(指向char的指针).但是,它不会为九个字符串分配内存. 当您加入ipStr时,您的程序会出现段错误. 解决方案:分配内存(例如使用malloc()或strdup()). (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- Angular CLI路由 – 不适用于(Apache-)Server
- angularjs – angular UI路由器| $stateParams不工作
- 调用webservice,解析返回数据为xml格式的字符串,进行数据
- 单元测试 – angular-mock.js与htmlunit冲突?如何使用mave
- Bootstrap简单HelloWorld入门教程
- angular 使用 ui-router 设计网页
- scala – 访问akka流的底层ActorRef Source.actorRef创建源
- Scala – Java =? (或Clojure – Java =?)
- 在AngularJS中防止带有承诺的ngRepeat闪烁
- 数据服务笔记