相关疑难解决方法(0)

char*str ="STRING"和char str [] ="STRING"之间的区别?

在编写一个简单的函数来从字符串中删除特定字符时,我遇到了这个奇怪的问题:

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)

c arrays string stack pointers

25
推荐指数
2
解决办法
3万
查看次数

为什么返回char *时C不会发出任何警告?

这是具有功能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

3
推荐指数
1
解决办法
87
查看次数

为什么在声明字符串时不需要分配内存

我是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)

无需分配内存.

是什么原因,它是如何工作的?如果我遗失了什么,请提醒我.

c

1
推荐指数
1
解决办法
403
查看次数

标签 统计

c ×3

arrays ×1

pointers ×1

stack ×1

string ×1