在C中动态复制特定索引中的字符串

在C中动态复制特定索引中的字符串,c,strncpy,C,Strncpy,如果我有 char str_cp[50],str[50], str_other[50], str_type[50]; strcpy(str,"how are you : i am fine"); strcpy(str_other, "who are you : may be robot or human being"); strcpy(str_type,"type : worker / manager "); 那么如何编码。。。将字符串从“:”复制到行尾?当我不认识你的时候 结束索

如果我有

 char str_cp[50],str[50], str_other[50], str_type[50];
 strcpy(str,"how are you : i am fine");
 strcpy(str_other, "who are you : may be robot or human being");
 strcpy(str_type,"type   : worker / manager ");
那么如何编码。。。将字符串从“:”复制到行尾?当我不认识你的时候
结束索引。

创建一个大小为50的不同数组,然后复制

char source[150]; // supoose your sorce array
char dest[150];   // suppose your destination
int i =0,Flag =0,j=0;

for(char c = source[i];c != '\0';i++)
 {  if(c == ':') 
       Flag = 1; // coz we have to start copying from here

    if(Flag == 1)
      dest[j++]=c; //copying the elements
  }

制作一个大小为50的不同数组,然后复制

char source[150]; // supoose your sorce array
char dest[150];   // suppose your destination
int i =0,Flag =0,j=0;

for(char c = source[i];c != '\0';i++)
 {  if(c == ':') 
       Flag = 1; // coz we have to start copying from here

    if(Flag == 1)
      dest[j++]=c; //copying the elements
  }

在C语言中,如果您有足够大的缓冲区,则可以使用strcpy
strcpy
完成从上的特定字符到字符串末尾的复制。您所需要做的就是将指针传递给要保留的初始字符

可以通过以下方式找到指针:

const char *tail = strchr(str, ':') + 1; // skip ':' itself. Add 2 to skip ' ' too
如果打印
tail
,将获得字符串其余部分的内容:

printf("%s\n", tail);
如果需要副本,请使用strcpy制作:

size_t len = strlen(tail)+1;
char *copy = malloc(len);
strcpy(copy, tail);

在C语言中,如果您有足够大的缓冲区,则可以使用strcpy
strcpy
完成从上的特定字符到字符串末尾的复制。您所需要做的就是将指针传递给要保留的初始字符

可以通过以下方式找到指针:

const char *tail = strchr(str, ':') + 1; // skip ':' itself. Add 2 to skip ' ' too
如果打印
tail
,将获得字符串其余部分的内容:

printf("%s\n", tail);
如果需要副本,请使用strcpy制作:

size_t len = strlen(tail)+1;
char *copy = malloc(len);
strcpy(copy, tail);

一个好的开始可能是。你所说的“结束索引”是什么意思?你不是一直复制到字符串的结尾吗?结尾索引的意思是。。。行的最后一个字符。是的,我想从“:”复制到line@FaisalHameed检查我的答案,如果你觉得这有帮助的话就接受它。一个好的开始可能是。你说的“结束指数”是什么意思?你不是一直复制到字符串的结尾吗?结尾索引的意思是。。。行的最后一个字符。是的,我想从“:”复制到line@FaisalHameed检查我的答案并接受它,如果你觉得这很有帮助,我们可以编辑它以省略标志,就像(c=':'| | strlen(dest)>0{dest[j++]=c;}是的,它可以工作,但是如果你觉得这个有帮助的话,@vijaymishra upvote的性能会下降,因为它很短而且没有循环。我甚至投票支持你。感谢一个不带指针复制字符串的解决方案。减少头痛。谢谢你。我认为,在不同的大小上,可能需要空终止
dest
变量。类似于
dest[j]='\0'
在循环之外。我们可以编辑它以省略标志,就像(c=':'| | strlen(dest)>0{dest[j++]=c;}是的,它可以工作,但是如果您发现这个函数很短并且没有循环,那么性能会降低@vijaymishra upvote。我甚至投票支持你。感谢一个不带指针复制字符串的解决方案。减少头痛。谢谢你。我认为,在不同的大小上,可能需要空终止
dest
变量。类似于循环外部的
dest[j]='\0'