在编写一个简单的函数来从字符串中删除特定字符时,我遇到了这个奇怪的问题:
void str_remove_chars( char *str, char to_remove)
{
if(str && to_remove)
{
char *ptr = str;
char *cur = str;
while(*ptr != '\0')
{
if(*ptr != to_remove)
{
if(ptr != cur)
{
cur[0] = ptr[0];
}
cur++;
}
ptr++;
}
cur[0] = '\0';
}
}
int main()
{
setbuf(stdout, NULL);
{
char test[] = "string test"; // stack allocation?
printf("Test: %s\n", test);
str_remove_chars(test, ' '); // works
printf("After: %s\n",test);
}
{
char *test = "string test"; // non-writable?
printf("Test: %s\n", …Run Code Online (Sandbox Code Playgroud) 这是具有功能GetString的代码,它将返回一个char指针。此char指针指向堆栈中的字符串。现在,为什么返回该字符串的地址时C编译器不会发出任何警告?范围有限吗?真的有问题吗?“ Hello”是否存储在数据段中?
#include <stdio.h>
#include <string.h>
char * GetString()
{
char *Hello = "Hello";
return Hello;
}
int main(void)
{
printf("%s",GetString());
return 0;
}
Run Code Online (Sandbox Code Playgroud) 我是C的新手,目前我正在努力了解指针是如何工作的.
这是一个困扰我的问题:
据我所知,在为指针赋值之前,你应该为该指针分配一定的内存(如果我错了,请纠正我:)),如下面的代码:
int main(void) {
int i;
int * ptr = (int *)malloc(sizeof(int));
i = 2;
*ptr = 5;
printfn("%d",*ptr);
free(ptr);
}
Run Code Online (Sandbox Code Playgroud)
但是,在C语句中声明字符串时,就像:
char *p = "Hello world";
Run Code Online (Sandbox Code Playgroud)
无需分配内存.
是什么原因,它是如何工作的?如果我遗失了什么,请提醒我.