c删除数组的第一个字符

hkv*_*ega 7 c

我有一个字符串:

str1 = "abcabcabc";
Run Code Online (Sandbox Code Playgroud)

如何删除第一个字符?我希望最终结果是:

str1 = "bcabcabc";
Run Code Online (Sandbox Code Playgroud)

pax*_*blo 19

如果你有一个字符串指向字符串,如:

char *s = "This is my string";
Run Code Online (Sandbox Code Playgroud)

那你就可以做s++.

如果你有一个字符数组,你最好的选择可能是有一个指向该数组的指针:

char s[] = "This is my string";
char *ps = s;
Run Code Online (Sandbox Code Playgroud)

然后你可以做ps++,并确保你使用ps而不是s.

如果您不想拥有指向阵列的单独指针,则可以使用memmove复制数据:

memmove (s, s+1, strlen (s+1) + 1); // or just strlen (s)
Run Code Online (Sandbox Code Playgroud)

虽然这些都不适用于最初为空的字符串,所以你必须先检查它.同时请记住这是不可取的企图修改字符串字面量以这种方式(或任何方式,真的),因为它是不确定是否该是允许的.

另一种解决方案是简单地编写循环代码:

for (char *ps = s; *ps != '\0'; ps++)
    *ps = *(ps+1);
*ps = '\0';
Run Code Online (Sandbox Code Playgroud)

这适用于所有字符串,空或其他.

  • 只有一条评论.如果字符串的空间是malloc,则保留原始指针,否则将无法释放该空间.如果空间是硬编码的,那么当然没问题.递归野兽+1.:-) (2认同)

Mat*_*haq 5

尝试:

char str1[] = "abcabcabc";
char *pstr1;
pstr1 = &(str1[1]);
Run Code Online (Sandbox Code Playgroud)

不好的做法,但是由于它是保留在堆栈上的,因此它不应杀死您。现在,如果您向我们展示了您的代码...


您可以使用strcpy

char str1[] = "abcabcabc";
char str2[sizeof(str1)-1];

if(strlen(str1) > 0)
{
    strcpy(str2, &(str1[1]));
}
else
{
    strcpy(str2, str1);
}

// str2 = "bcabcabc";
Run Code Online (Sandbox Code Playgroud)

对于C ++,您只需使用std :: string :: substr

std::string str1 = "abcabcabc";
std::string str2 = str1.substr(1, str1.length() - 1);
// str2 = "bcabcabc";
Run Code Online (Sandbox Code Playgroud)