是否有区别:
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风格的字符串一起使用.为什么这两个相当?
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和C++中,通过调用:创建一个字符数组:
char *s = "hello";
Run Code Online (Sandbox Code Playgroud)
实际上创建了两个对象:在静态空间中创建的只读字符数组,意味着它在程序的整个持续时间内存在,以及指向该内存的指针.指针是其范围的局部变量然后死亡.
我的问题是当指针死亡时数组会发生什么?如果我在函数内执行上面的代码,这是否意味着退出函数后我有内存泄漏?
在下面的代码中,结果是堆栈溢出.尽管两个字符串都有空字符,但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的新手.为了存储字符串文字,我看到了两种方式,如下所示
char s[]="Mohan";
char *ptr="Mohan";
Run Code Online (Sandbox Code Playgroud)
那么,这两者之间有什么区别.以及如何为这两个语句分配内存.
提前致谢...
我读了几个类似的问题,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在之前的情况下再次变得不可变?
我正在尝试使用 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) 我写代码时代码没有崩溃:
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)
有谁知道为什么?
我正在开发一个在数组中包含字符串的应用程序:
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程序崩溃:
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)