gpt4 book ai didi

C编程: Creating substring

转载 作者:行者123 更新时间:2023-11-30 19:06:37 24 4
gpt4 key购买 nike

我是 C 语言新手,我需要一些关于我做错了什么的解释。

我正在尝试迭代一个字符串并找到第一个“\”,然后从数组中的该位置创建一个子字符串。

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main() {

struct info{
char* name;
char* type;
char* path;
};
struct info user1;

char* a = "/home/users/user1";

for (int i = strlen(a) ; i < 0 ; i--) {
printf("%d",i);
if(strcmp(a[i],'/')==0){
strncpy(a,user1.name,i);
break;

}


}

return 0;
}

最佳答案

错误较多,我一一解释。代码将是这样的。

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main(void) {

struct info{
char* name;
char* type;
char* path;
};
struct info user1;
user1.name = malloc(40);
if( user1.name == NULL){
fprintf(stderr, "%s\n","Error in malloc" );
exit(1);
}

const char* a = "/home/users/user1";

for(int i = strlen(a) -1; i >= 0 ; i--) {
if(a[i]=='/'){
strncpy(user1.name,a+i+1,i);
user1.name[i]='\0';
break;
}


}
printf("%s\n",user1.name );
free(user1.name);
return 0;
}

你做错的事情

  • 没有为name分配内存,它只是一个未初始化的指针。这里我们已经给它分配了内存。

  • 第二件事,strcmp 顾名思义,比较以 null 结尾的 char 数组,而不是 char-s。它可以通过简单的 == 运算符来完成。

  • 复制部分修改为仅复制用户名部分,不复制其他内容。这就是为什么我们增加了指针以指向正确的位置。

  • 您忘记检查 malloc 的返回值,然后您应该释放分配的内存。

  • 此外,您无法修改字符串文字,因为它保留在内存的不可修改部分。

关于C编程: Creating substring,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47772637/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com