将字符串从小写转换为大写seg错误

时间:2017-09-12 02:58:28

标签: c

我正在尝试将已传递给此函数的字符串从小写转换为大写。我一直遇到段错误,无法确定原因。

void uppercase(char* input)
{
    int str_size = strlen(input);
    char *string = input;
    for (int i = 0; i < str_size; i++)
    {
      string[i] += -32;
      printf("%c", string[i]);
    }
    return;
}

调用函数大写的函数:

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

int main(void)
{

  uppercase("max");

  return(0);

}

3 个答案:

答案 0 :(得分:1)

您传递的字符串是可能存在于只读内存中的文字(因为它是一个常量的字符串文字),您不能修改它。因此错误。

将字符串存储在字符数组中,然后将其传递给函数。

char str[]="max";
uppercase(max);

http://www.geeksforgeeks.org/storage-for-strings-in-c/

https://softwareengineering.stackexchange.com/questions/294748/why-are-c-string-literals-read-only

答案 1 :(得分:0)

正如@dasblinkenlight所说,你是cannot modify a string literal

请改为尝试:

int main(void)
{
  char str[4] = "max";
  uppercase(str);

  return(0);
}

或者你也可以malloc一个字符串并传入它。

答案 2 :(得分:0)

您不能将字符串文字作为参数传递给函数。尝试先将它存储在数组中,然后将其传递给函数。

  #include <stdio.h>
  #include <string.h>
  void uppercase(char* input)
  {
  int str_size = strlen(input);
  char *string = input;
  for (int i = 0; i < str_size; i++)
  {
  string[i] += -32;
  printf("%c", string[i]);
  }
  return;
  }

  int main(void)
  {
  char str[]="max";
  uppercase(str);
  return(0);
  }