修改char * str的内容

时间:2015-09-24 01:48:01

标签: c

我试图通过void函数反转字符串,但是" str"它存储的只读存储器(正如我在论坛中搜索现有线程所知)。

我尝试在"反向"中使用strcpy(copy,str)。功能,但它只是颠倒新创建的char数组" copy"哪些不能返回主函数。我不想在反向函数中使用printf("%s",copy)来打印反向字符串。

无论如何都要反转In [19]: df.columns[df.columns.astype(str).str.contains(r'\d{4}$')] Out[19]: Index([1961, 1962, 1963, 1964, 1965, 1966, 1967, 1968, 1969, 1970, 1971, 1972, 1973, 1974, 1975, 1976, 1977, 1978, 1979, 1980, 1981, 1982, 1983, 1984, 1985, 1986, 1987, 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013], dtype='object')

  1. 不将其更改为str
  2. 不更改char str[] = "Hello"功能
  3. 中的代码
  4. main()的功能类型保持为reverse()
  5. void

2 个答案:

答案 0 :(得分:3)

问题是你无法修改字符串文字。

试试这样:

char str[] = "Hello";
reverse(str);

以上,str不再是字符串文字,它是一个初始化为{'H', 'e', 'l', 'l', 'o', '\0'}的数组,因此您可以根据需要修改其内容。

或者您可以使用malloc()

char *str = malloc(6);
if (str != NULL)
 {
    strcpy(str, "Hello");
    reverse(str);
    fprintf(stdout, "%s\n", str);
    /* And never forget to `free' */ 
    free(str);
 }

定义字符串文字时,使用const来保护它不被修改,至少不会意外地这样做。

无法满足这些要求

  
      
  1. 不将其更改为char str[] = "Hello"

         

    因为您无法修改字符串文字

  2.   
  3. 无需更改main()功能

    中的代码      

    因为这需要程序修改字符串文字而你不能

  4.   

第三个要求,根本没有任何问题。

答案 1 :(得分:-4)

每次使用指针时都必须在C中使用malloc()或在C ++中使用new()这可能是个问题。但是你总是可以将任何东西的反引用转发回指针,就像我在下面做的那样

DEMO:http://ideone.com/LnOtDL

#include <string.h>

void reverse(char* str)
{
  int length = strlen(str);
  char temp;
  int j = length - 1;

  for (int i = 0; i < j; ++i)
  {
     temp = str[i];
     str[i] = str[j];
     str[j] = temp;
     --j;
  }
}

int main(int argc, char* argv[])
{
   char str[] = "Hello";
   reverse(&str[0]);
   printf("%s\n", str);
   return 0;
}