相关疑难解决方法(0)

char string*vs char string []

是否有区别:

char string = "name";
const char* point = string;
Run Code Online (Sandbox Code Playgroud)

VS

const char string[] = "name";
Run Code Online (Sandbox Code Playgroud)

你能解释一下这个区别吗?

c

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

将c-string的地址转储到ostream?

我正在学习指针,我不明白指针如何与C风格的字符串一起使用.为什么这两个相当?

char a[] = "Gme";
char* p = a; //Why am I allowed to assign "Gme" to a pointer (pointer is an address)

cout << p << " " << *(p+1); //Why does it print "gme" with "cout<<p" (I mean, I am printing an address)?
Run Code Online (Sandbox Code Playgroud)

char a[] = "Gme";
char* p = &a[0];   // How is this the same as char* p = a;

cout << p << " " << *(p+1);
Run Code Online (Sandbox Code Playgroud)

总的来说,我不明白指针如何与字符串一起使用.如何将字符存储在内存中?如果我们将字符串视为字符数组,为什么我不能打印char元素的地址?

提前致谢 :)

c++ pointers c-strings

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

char*空间分配

我的理解是在C和C++中,通过调用:创建一个字符数组:

char *s = "hello";
Run Code Online (Sandbox Code Playgroud)

实际上创建了两个对象:在静态空间中创建的只读字符数组,意味着它在程序的整个持续时间内存在,以及指向该内存的指针.指针是其范围的局部变量然后死亡.

我的问题是当指针死亡时数组会发生什么?如果我在函数内执行上面的代码,这是否意味着退出函数后我有内存泄漏?

c++ memory-leaks string-literals

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

带有指向字符数组的strcpy函数

在下面的代码中,结果是堆栈溢出.尽管两个字符串都有空字符,但strcpy循环应该终止,因为源字符串具有空字符.为什么发生堆栈溢出?

#include <stdio.h>
#include<strings.h>
int main(void) {
    char *str="Hello world";
    char *str1="Good morning";
    strcpy(str,str1);
    printf("%s",str);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

c stack-overflow pointers strcpy

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

C编程中的字符串分配

我是C的新手.为了存储字符串文字,我看到了两种方式,如下所示

    char s[]="Mohan";
    char *ptr="Mohan";
Run Code Online (Sandbox Code Playgroud)

那么,这两者之间有什么区别.以及如何为这两个语句分配内存.

提前致谢...

c

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

C中的char stringA [LEN]和char*stringB [LEN]之间有什么区别?

我读了几个类似的问题,C:字符指针和数组之间的差异,是什么个char []与char*S之间的区别?,char array []和char*array有什么区别?但他们似乎都不清楚我的怀疑.

我知道

char *s = "Hello world";
Run Code Online (Sandbox Code Playgroud)

使字符串不可变,而

char s[] = "Hello world";
Run Code Online (Sandbox Code Playgroud)

可以修改.

我怀疑的是,如果我这样做char stringA[LEN]; ,char* stringB[LEN];他们有什么不同吗?或者stringB在之前的情况下再次变得不可变?

c arrays string pointers

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

ANSI C strstr() 不使用指针

我正在尝试使用 strstr() 在字符串中查找子字符串。仅使用 char[] 有效,char* 无效,导致分段错误。

所以这个正在工作:

int main() {
    char str[] = "apple apple peach";
    char *p;

    p = strstr(str, "peach");
    if (p!= NULL) {
        strncpy(p, "apple", 5);
    }
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

但这一个不起作用:

int main() {
    char *str = "apple apple peach";
    char *p;

    p = strstr(str, "peach");
    if (p!= NULL) {
        strncpy(p, "apple", 5);
    }
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

这个既不是:

int main() {
    char *str = "apple apple peach";
    char *peach = "peach";
    char *p;

    p = strstr(str, peach); …
Run Code Online (Sandbox Code Playgroud)

c strstr strncpy string.h

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

C代码从memmove崩溃

我写代码时代码没有崩溃:

char s[44] = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa";
memmove(s, "asdf", 5);
Run Code Online (Sandbox Code Playgroud)

但是当我写作时它会这样做:

char* s = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa";
memmove(s, "asdf", 5);
Run Code Online (Sandbox Code Playgroud)

有谁知道为什么?

c memmove

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

如何告诉C编译器不要重叠我的字符串

我正在开发一个在数组中包含字符串的应用程序:

static char * strings[] = {
  "ABC DEF",
  "EF",
  "GHI"
};
Run Code Online (Sandbox Code Playgroud)

注意,该类型没有const修饰符!

在我的应用程序中,我循环数组并还原字符串.预期的结果是:

{
  "FED CBA",
  "FE",
  "IHG"
}
Run Code Online (Sandbox Code Playgroud)

但是我得到的结果是:

{
  "FED CAB",
  "AB",
  "IHG"
}
Run Code Online (Sandbox Code Playgroud)

原因是因为在原始数组中,字符串被编译为重叠:strings [1]与字符串[0]的末尾重叠!

// When I printed out the pointers it turned out that in the RAM
// it stored my strings "overlapping":
//  00 01 02 03 04 05 06 07 08 09 0a 0b
// "A  B  C  __ D  E  F  \0 G  H  I  \0"

static char * strings[] = …
Run Code Online (Sandbox Code Playgroud)

c arrays string

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

为什么C程序崩溃了?

请有人解释为什么以下C程序崩溃:

void changeChar(char *string);

int main(int argc, char *argv[])
{
  char *test = "word";
  changeChar(test);
  return 0;
}

void changeChar(char *string) {
  *string = 'A';
}
Run Code Online (Sandbox Code Playgroud)

而以下代码完美地运作:

void changeChar(char *string);

int main(int argc, char *argv[])
{
  char test[] = "word";
  changeChar(test);
  return 0;
}

void changeChar(char *string) {
  *string = 'A';
}
Run Code Online (Sandbox Code Playgroud)

c string pointers string-literals

-2
推荐指数
2
解决办法
136
查看次数