c - 追加字符以获取字符串

标签 c string

我在 C 中有以下代码:

    char *str = "Hello World";
    char *s = malloc(strlen(str));
    int i =0;
    for(;i<strlen(str)-5;i++)
    {
        s += *(str+i);
    }
    printf(s);

它什么也没显示。我想要的是获取存储在s中的str的子串。

在 Java 中,我会执行以下操作:

    String str = "Hello World";
    String s="";

    for(int i=0;i<str.length()-5; i++)
        s+=str[i];

    System.out.println(s);

或者改为使用 substring 方法。例如 String s = str.substring(1,2);

我怎样才能实现它?

最佳答案

使用strcpy函数。

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

int main(int argc, char *argv[] ) 
{
  char *str = "Hello World";
  size_t length = strlen(str);

  char *s = (char*)malloc(sizeof(char) * (length + 1));

  strcpy(s, str);

  s[length] = '\0'; // makes sure it's NUL terminated

  printf("%s", s);

  free(s);

  return 0;
}

分配目标缓冲区时,请注意字符串以NUL 字符结束。

要只复制一个子字符串,使用strncpy:

strncpy(s, str + 6, strlen(str) - 6);

只会将“World”复制到s

在任何情况下,请确保您的 C 字符串在使用 printf 等函数之前以 NUL 终止。

另见 strcatstrncat。还有,熟悉 C 数组和指针。

关于c - 追加字符以获取字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1954635/

相关文章:

c - 如何创建一个返回函数指针数组中的函数指针的函数

java - Java 中 LinkedList 元素与字符串的比较

java - 如何拆分字符串以仅获取字符/单词

java |防止除下划线之外的任何特殊字符

SQL 将字符串 MMM.YY 转换为日期

javascript - 快速查找两个字符串是否具有共同字符的方法

c - fork()!=0 和 !fork() 在进程创建中有什么区别

c - fuse filesystem不能改变getattr函数中struct stat *stbuf的值?

c++ - 在函数调用之前使用 (void)

c - 如何在C代码中引用一个汉字