如何将字符数组分配给字符串文字

问题描述 投票:-1回答:1

我有一个char数组,我正在尝试在数组中使用相同的字符串。

我尝试了strcpy,并尝试=,我尝试了我在下面的代码中所做的。但它似乎不起作用或我理解的东西。

char s1[10]="Youssef";
char *s2
while(*s2!='\0')
    *s2++=*s1++;
printf("%s",s2);

流程不会返回。

c arrays string pointers string-literals
1个回答
1
投票

字符串文字是只读的。

在任何情况下,你想要做的似乎都很困惑。

字符串文字:char *sl = "string literal";

一个未初始化的char指针:char *s2;

为了做你喜欢的副本,你首先需要为字符串分配内存。

而且,你不能用数组做指针算术。数组和指针不是一回事!

此外,你应该记住s2指针的来源,因为在递增它之后直到复制完成,你需要重置指针。练习:想想如果你在一个函数中做副本会发生什么(最好名为mystrcpy` )...

完整的例子:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main(void) {
  char s1[10]="Youssef";
  char *s2 = malloc(sizeof(char) * (strlen(s1) + 1)); // +1 for the NULL-terminator
  int i = 0;
  char *origin_s2 = s2;
  while(s1[i] != '\0')
    *s2++ = s1[i++];
  *s2 = '\0';
  s2 = origin_s2;
  printf("%s\n", s2);
  return 0;
}

输出:

优素福

PS:强烈建议检查内存的动态分配是否成功(检查malloc()的返回值是否不是NULL)。

© www.soinside.com 2019 - 2024. All rights reserved.