相关疑难解决方法(0)

C:char指针和数组之间的差异

考虑:

char amessage[] = "now is the time";
char *pmessage = "now is the time";
Run Code Online (Sandbox Code Playgroud)

我从C编程语言第2版​​中读到,上述两个陈述没有做同样的事情.

我一直认为数组是一种操作指针来存储一些数据的便捷方式,但显然情况并非如此...... C中数组和指针之间的"非平凡"差异是什么?

c arrays pointers

135
推荐指数
5
解决办法
5万
查看次数

如何在C中声明字符串

可能重复:
内存分配char*和char []

任何人都可以解释我这些代码行之间的区别

char *p = "String";
char p2[] = "String";
char p3[7] = "String";
Run Code Online (Sandbox Code Playgroud)

我应该在什么情况下使用以上各项?

c

105
推荐指数
4
解决办法
43万
查看次数

char a [] =?string?有什么区别?和char*p =?string?;?

正如标题所说,有什么区别

char a[] = ?string?; and 
char *p = ?string?;  
Run Code Online (Sandbox Code Playgroud)

这个问题在接受我采访时被问到了.我甚至不理解这个说法.

char a[] = ?string?
Run Code Online (Sandbox Code Playgroud)

什么是?运营商?它是字符串的一部分还是具有某些特定含义?

c++ pointers

47
推荐指数
5
解决办法
6万
查看次数

sizeof(&array)返回什么?

问题是:为什么数组的地址等于它在C中的值?

#include <stdio.h>
#define N 10    
char str2[N]={"Hello"};
int main(){
    printf("sizeof(str2): %d bytes\n", sizeof(str2));
    printf("sizeof(&str2): %d bytes\n", sizeof(&str2));
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

输出:

sizeof(str2): 10 bytes
sizeof(&str2): 4 bytes
Run Code Online (Sandbox Code Playgroud)

我知道str2单独是数组中第一个元素的地址str2.并且当str2它的参数何时sizeof返回整个数组str2的大小.

另外,&str2也是arr中第一个元素的地址,str2但是来自不同的类型(char (*)[N]==指向数组的指针).但是&str2当它是一个论证时,它是如何表现的sizeof

c string pointers sizeof

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

如何在内存中分配C字符串?

假设我有一个以这种方式返回C字符串的简单函数:

const char * getString()
{
  const char * ptr = "blah blah";
  return ptr; 
}
Run Code Online (Sandbox Code Playgroud)

我以这种方式从main()调用getString():

  const char * s = getString();
Run Code Online (Sandbox Code Playgroud)

1)根据gdb,变量ptr存储在堆栈中,但ptr指向的字符串不是:

(gdb) p &ptr
$1 = (const char **) 0x7fffffffe688

(gdb) p ptr
$2 = 0x4009fc "blah blah"
Run Code Online (Sandbox Code Playgroud)

这是否意味着"blah blah"不是getString()中的局部变量?

我想如果它是一个局部变量,我将无法将它传递给我的main()函数......但如果它不存在,它存储在哪里?在堆上?这是OS每次点击字符串时实现的"一种"动态内存分配,还是什么?

2)如果我使用数组而不是指针,这样:

const char *getString2()
{
  const char a[] = "blah blah blah";
  return a;
}
Run Code Online (Sandbox Code Playgroud)

编译器警告我:

warning: address of local variable ‘a’ returned

(当然程序编译,但它不起作用).

实际上,如果我问gdb,我会的

(gdb) p &a
$2 = (const char …
Run Code Online (Sandbox Code Playgroud)

c

12
推荐指数
2
解决办法
802
查看次数

指针和数组之间的区别

可能重复:
char*str ="STRING"和char str [] ="STRING"之间的区别?
C:指针和数组之间的差异

嗨,

谁能告诉我下面的陈述之间的区别?

char *p = "This is a test";

char a[] = "This is a test";
Run Code Online (Sandbox Code Playgroud)

c c++

10
推荐指数
2
解决办法
5907
查看次数

为什么在写入字符串文字时scanf无法正常工作?

include<stdio.h>
int main()
{
    //char b[10];
    char *a="goodone";
    //a=b;

    scanf("%s",a);//this scanf fails and thow segmentation fault.
    printf("%s",a);

} 
Run Code Online (Sandbox Code Playgroud)

为什么这不起作用?我用这个scanf试了很多但是,当我为我的变量保留内存a*(通过指定a = b(注释))它工作正常.否则它没有.我相信char*a会为其字符串("goodone")分配一些内存,并将该内存位置返回其值.和printf一起工作正常,为什么scanf没有?请救我这个....

c scanf

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

运行简单的字符串C程序时出现总线错误

我正在运行这个简单的程序,我得到的输出是"总线错误".使用一些调试语句我发现它发生的点是在strcat()调用.

#include<stdio.h>
#include<string.h>
main()
{
char *s = "this is ";
char *s1 = "me";  
strcat(s,s1); 
printf("%s",s);
return 0;
}
Run Code Online (Sandbox Code Playgroud)

我在MAC,64位操作系统上使用gcc编译器运行它.如果我需要提供更多规格,请告诉我.

谢谢!

c string strlen bus-error

4
推荐指数
2
解决办法
5789
查看次数

C-中的字符串是char*str,真的等同于char str []吗?

可能重复:
char*str ="STRING"和char str [] ="STRING"之间的区别?
需要一些C编程方面的帮助

而这个剪辑会导致分段错误

int main(void) {

    char*  str ="abcde";
    str[strlen(str)-1] ='\0';
    printf("%s",str);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

如果我把char str [] ="abcde";指针放在 完美的指针上,你知道为什么会这样吗?

c

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

在C中初始化字符串

可能重复:
char*str ="STRING"和char str [] ="STRING"之间的区别?

我写了以下代码:

int main()
{
    char *str = "hello";
    str[0] = 'H';
    printf("%s\n", str);
}
Run Code Online (Sandbox Code Playgroud)

这给了我一个分段错误,我不明白为什么.

strpointer to char不是const char.即使是这样的情况也不应该像下面的程序那样给出编译错误:

int main()
{
    const char *str = "hello";
    str[0] = 'H';
    printf("%s\n", str);    
}
Run Code Online (Sandbox Code Playgroud)

它给出了一个错误:assignment of read-only location *str.

编辑

如果我的代码将指针放在只读位置,我不应该得到编译错误?

c arrays string

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

标签 统计

c ×9

pointers ×3

string ×3

arrays ×2

c++ ×2

bus-error ×1

scanf ×1

sizeof ×1

strlen ×1