gpt4 book ai didi

C 编程复制子字符串

转载 作者:行者123 更新时间:2023-11-30 15:54:22 25 4
gpt4 key购买 nike

我试图将子字符串从一个 char* 复制到另一个,当我 printf(%c) 时,它显示字符打印,但在 add 方法结束时,我使用 printf(%s) 打印整个字符串,但没有打印任何内容出去。感谢任何帮助 - 也许还有比逐个字符更好的 C 子字符串方法?

代码如下:

int aliasCount;

typedef struct Alias {
char* alias;
char* actual;
struct Alias* next;
}Alias;

Alias* aliasHead;

void addAlias(char* new);

addAlias方法

void addAlias(char* new)
{
strip(new);
Alias* newAlias = (Alias*)malloc(sizeof(Alias));

//Get start-end position for alias
int start=0; int end=0; int countSpace=0;
for(int i = 0; i < strlen(new); i++)
{
//Check for space
if(new[i]==' ')
{
printf("found space %d\n",i);
countSpace++;
if(countSpace==1)
{
start=i;
}
else if(countSpace==2)
{
end=i;
break;
}
}
}

//malloc memory
newAlias->next=NULL;
newAlias->alias=(char*)malloc(sizeof(char)*(end-start));
newAlias->actual=(char*)malloc(sizeof(char)*(strlen(new)-end+1));

//Get substring,
//Copy char by char from alias to node
for(int i = 0; i < strlen(new); i++)
{
if(i>start && i<end) //Alias
{
newAlias->alias[i] = new[i];printf("'%c'",newAlias->alias[i]);
}
else if(i>end) //Actual command
{
newAlias->actual[i] = new[i];printf("'%c'",new[i]);
}
}
printf("%s\n%s\n",newAlias->alias,newAlias->actual);

if(aliasCount==0)
{
aliasHead = newAlias;
}
else
{
Alias* curr = aliasHead;
for(int i = 0; i < aliasCount; i++)
{
curr=curr->next;
}
curr->next = newAlias;
}
aliasCount++;
printf("%s\n%s\n",aliasHead->alias,aliasHead->actual);
}

最佳答案

你的索引是错误的;您复制 new[start+1] 的范围至new[end-1]范围为 alias[start+1]alias[end-1] ,当您实际上需要将其复制到 alias[0] 的范围内时至alias[end-start-2] :

        newAlias->alias[i-start-1] = new[i];printf("'%c'",newAlias->alias[i]);

对于 actual 也类似(作必要修改) .

关于C 编程复制子字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13040222/

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