我试图通过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')
str
char str[] = "Hello"
功能main()
的功能类型保持为reverse()
?void
答案 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
来保护它不被修改,至少不会意外地这样做。
无法满足这些要求
不将其更改为
char str[] = "Hello"
因为您无法修改字符串文字
- 醇>
无需更改
中的代码main()
功能因为这需要程序修改字符串文字而你不能
第三个要求,根本没有任何问题。
答案 1 :(得分:-4)
每次使用指针时都必须在C中使用malloc()
或在C ++中使用new()
这可能是个问题。但是你总是可以将任何东西的反引用转发回指针,就像我在下面做的那样
#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;
}