相关疑难解决方法(0)

char*数组和char数组[]

如果我写这个

 char *array = "One good thing about music";
Run Code Online (Sandbox Code Playgroud)

我实际创建一个数组?我的意思是这样的一样吗?

char array[] = {"One", "good", "thing", "about", "music"};
Run Code Online (Sandbox Code Playgroud)

c arrays pointers char

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

在C中,我可以在指针声明中初始化字符串,就像我可以在char数组声明中初始化字符串一样吗?

这两行代码是否实现了相同的结果?如果我在函数中有这些行,那么在两种情况下字符串都存储在堆栈中吗?除了不需要在第一行代码中声明空终止符之外,我是否应该使用一个而不是另一个?

char  s[] = "string";
char* s   = "string\0";
Run Code Online (Sandbox Code Playgroud)

c arrays pointers c-strings

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

指针和数组之间的区别

可能重复:
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
查看次数

strlen和sizeof对于基于Pointer和Array的init的不同答案

可能的重复:
C:指针和数组之间的
差异结果的大小不同

基本上,我这样做了......

 char *str1 = "Sanjeev";
 char str2[] = "Sanjeev";
 printf("%d %d\n",strlen(str1),sizeof(str1));    
 printf("%d %d\n",strlen(str2),sizeof(str2));
Run Code Online (Sandbox Code Playgroud)

我的输出是

7 4
7 8
Run Code Online (Sandbox Code Playgroud)

我无法说明原因为sizeof str14.请解释这些之间的区别.

c c++

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

为什么我们不能使用整数指针声明数字数组

char *ch = "delhi";               // valid

int *arr = {1, 2, 3};             // invalid

int *arr = (int[3]){1, 2, 3};     // valid
Run Code Online (Sandbox Code Playgroud)

为什么上述某些陈述有效而其他陈述无效?

c c++ arrays string pointers

9
推荐指数
2
解决办法
750
查看次数

无法修改C字符串

请考虑以下代码.

int main(void) {
    char * test = "abcdefghijklmnopqrstuvwxyz";
    test[5] = 'x';
    printf("%s\n", test);
    return EXIT_SUCCESS;
}

在我看来,这应该打印abcdexghij.但是,它只是终止而不打印任何东西.

int main(void) {
    char * test = "abcdefghijklmnopqrstuvwxyz";
    printf("%s\n", test);
    return EXIT_SUCCESS;
}

然而,这工作得很好,所以我误解了操纵C字符串或其他东西的概念吗?如果它很重要,我正在运行Mac OS X 10.6,它是我正在编译的32位二进制文​​件.

c cstring

8
推荐指数
2
解决办法
3545
查看次数

C分配指针?这是什么?

我有以下代码.

char a[] = "abcde";
char *b = "fghij";
char *c = malloc(6);
char *d = c;
c = "klmno";
Run Code Online (Sandbox Code Playgroud)

演习陈述:

绘制数据结构a,b,c和d(带内容)的图片,您可以在其中查看已分配的内容并使用箭头显示指针的设置方式.

我的解决方案是:

      ____________
a -> |a|b|c|d|e|\0|
      ¨¨¨¨¨¨¨¨¨¨¨¨
      ____________
b -> |f|g|h|i|j|\0|
      ¨¨¨¨¨¨¨¨¨¨¨¨
      ____________
c -> |k|l|m|n|o|\0|
      ¨¨¨¨¨¨¨¨¨¨¨¨
      ___________
d -> | | | | | | |
      ¨¨¨¨¨¨¨¨¨¨¨
Run Code Online (Sandbox Code Playgroud)

但是我的解决方案没有被接受,响应是" 为指向b,c,d而不是a的指针分配内存 ".有人能解释一下这意味着什么吗?

c pointers memory-management char

8
推荐指数
2
解决办法
332
查看次数

外部声明,T*v/s T []

我在遗留项目中看到了以下代码段.

/* token.c */
struct token id_tokens[MAX_TOKENS];

/* analyse.c (v1) */
extern struct token *id_tokens; /* Raised my eyebrow, id_token declares a pointer */
Run Code Online (Sandbox Code Playgroud)

我坚持要改变analyse.c以包含如下声明:

/* analyse.c (v2) */
extern struct token id_tokens[]; /* I am happy with this. id_tokens declares array of unspecified size. */
Run Code Online (Sandbox Code Playgroud)

我想v2因为pointer to T不一样array of T.我朋友的反驳说,两者的行为都是一样的,所以我使用v1和v2并不重要.

问题1:不完整类型的数组是否耗尽指针?

问题2:我的朋友是对的,两个版本在行为上都保证是等价的吗?

c declaration extern language-lawyer

8
推荐指数
2
解决办法
341
查看次数

键入cast char指向整数指针的指针

所以我看到了一些关于如何找到架构的字节顺序的例子.假设我们有一个指向int数据类型的整数指针.让我们说int值是0x010A0B12.在小端架构中,最低有效字节(即12)将存储在最低内存地址中,对吧?因此,4字节整数中的最低字节为12.

现在,检查.如果我们声明了一个char指针p,并且将整数指针强制转换为char*并将其存储在p中,并打印出取消引用的p值,我们将获得该架构的字节序的线索.如果它是12,我们就是小尾数; 01表示大端.听起来真的很整洁......

int a = 0x010A0B12;
int *i = &a;
char *p = (char*)i; 
printf("%d",*p); // prints the decimal equivalent of 12h!
Run Code Online (Sandbox Code Playgroud)

这里有几个问题,真的.由于指针是强类型的,字符指针不应该严格指向char数据类型吗?用%d打印的是什么?难道我们不应该用%c打印字符吗?

c pointers casting endianness

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

修改C中函数内的char数组

所以我最近一直在玩C,并且一直试图理解通过值/引用传递的复杂性以及在函数内操作传入变量的能力.然而,我遇到了以下问题:

void modifyCharArray(char *input)
{
    //change input[0] to 'D'
    input[0] = 'D';
}

int main()
{
    char *test = "Bad";
    modifyCharArray(test);
    printf("Bad --> %s\n", test);
}
Run Code Online (Sandbox Code Playgroud)

所以想法只是修改函数内的char数组,然后在修改完成后打印出所有数组.但是,这会失败,因为我所做的只是修改input传入的值,而不是实际的内存地址.

简而言之,有没有什么方法可以让我char *input进入一个函数并修改它的原始内存地址而不使用像memcpystring.h 这样的东西?

c arrays

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