首页 > 解决方案 > 在 C 中将 char 转换为 char*

问题描述

我有一个 char 数组s[11]="0123456789";,我希望能够获取每个数字s[i](使用 for 循环)并以某种方式将其转换为 a char*(我需要一个 char*,特别是因为我需要在其他字符串上使用 strncat)

在过去的 4 个小时里,我一直在尝试这样做,但我什么也做不了。

标签: cpointerschar

解决方案


除非您愿意临时修改s,或将角色复制到其他地方……否则您将很难过。

s临时修改。

int main() {
  char s[11] = "0123456789";
  for (int i = 0; i < strlen(s); i++) {
    // Modify s in place.
    const char tmp = s[i+1];
    s[i+1] = '\0';
    char *substr = &s[i];
    // Do something with substr.
    printf("%s\n", substr);
    // Fix s
    s[i+1] = tmp;
  }
}

或者复制s[i]到一个新的字符串。

int main() {
  char s[11] = "0123456789";
  for (int i = 0; i < strlen(s); i++) {
    // Create a temporary string
    char substr[2];
    substr[0] = s[i];
    substr[1] = '\0';
    // Do something with substr.
    printf("%s\n", substr);
  }
}

或者也许只是不使用 strncat?

假设您实际上正在使用strncat或类似...这些功能非常简单,特别是如果您只附加一个字符。您可能只是创建自己的版本。

void append_character(char *buffer, int buffer_size, char new_character) {
  int length = strlen(buffer);
  if (length + 2 < buffer_size) {
    buffer[length] = new_character;
    buffer[length+1]  = '\0';
  } else {
    // No space for an additional character, drop it like strncat would.
  }
}

或者您可以将其作为 strncat 的简单包装器:

void append_character(char *buffer, int buffer_size, char new_character) {
  char new_string[2] = { new_character, '\0' };
  strncat(buffer, buffer_size, new_string);
}

推荐阅读