我试图将子串从一个char *复制到另一个char *,当我printf(%c)它显示chars打印时,但在add方法结束时,我使用printf(%s)打印整个字符串,什么都没有打印出。感谢任何帮助 - 对于C中的子串也可能是更好的方法,而不是char的char?
以下代码:
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);
}
答案 0 :(得分:1)
你的指数错了;您将范围从new[start+1]
复制到new[end-1]
,范围从alias[start+1]
到alias[end-1]
,当您确实需要将其复制到alias[0]
到{alias[end-start-2]
的范围内时{1}}:
newAlias->alias[i-start-1] = new[i];printf("'%c'",newAlias->alias[i]);
以及actual
的类似( mutatis mutandis )。