gpt4 book ai didi

C、char** 奇怪的输出

转载 作者:行者123 更新时间:2023-11-30 20:24:47 25 4
gpt4 key购买 nike

#include    <stdio.h>

char** StringArray ( int n_size )
{
char* astr_allocate[ n_size ];
char** pstr_string_array = astr_allocate;
int n_count;

for ( n_count = 0; n_count < n_size; n_count++ )
*(pstr_string_array + n_count) = " ";

*(pstr_string_array + n_size) = "\0";

return pstr_string_array;
}


char* String ( int n_size )
{
char ach_allocate[ n_size ];
char* str_string = ach_allocate;
int n_count;

for ( n_count = 0; n_count < n_size; n_count++ )
*(str_string + n_count) = ' ';

*(str_string + n_size) = '\0';

return str_string;
}


void main ()
{

int n_size = 5;
int n_count ;
char* pch_string = String ( n_size );
char** pstr_string = StringArray ( n_size );

for ( n_count = 0; n_count < n_size; n_count++ )
printf ( "%c", *(pch_string + n_count) );

for ( n_count = 0; n_count < n_size; n_count++ )
printf ( "%s", *(pstr_string + n_count) );

printf ( "\n\n" );
}

这会产生“???”的精彩输出(字面上的问号)和类似的随机内容。我只是想更多地了解指针和字符串类型的东西,如果有人可以帮忙那就太好了,谢谢!

另外:一直在 Linux 终端和 Nano 中编写和编译它,如果这改变了什么

最佳答案

我建议你更多地学习数组、指针和字符串。

  • 由于此程序是用于常规托管系统 (Linux) 的程序,因此您必须将 main 声明为 int main (void)
  • C 没有预制的字符串类,C 字符串是字符数组。因此,它们实际上需要被分配到某个地方。您确实尝试将它们分配为函数内的局部变量,但不能返回指向局部变量的指针,因为一旦离开函数,该变量将不再有效。以前为阵列保留的内存现在可能随时用于完全不相关的事情。 See this .
  • C 中的数组是零索引的。这意味着给定一个数组int arr[2];,项目的索引为[0]和[1]。因此,您无法通过 arr[2] = ...*(arr + 2) = ... 来访问它,因为它指向超出了数组。
  • 给定一个指向字符的指针,该指针指向字符数组(C 字符串),您无法通过执行诸如 *(pstr_string_array + n_count) = ""; 之类的操作来为其分配数据因为这只会改变指针指向的位置!你什么也没复制。相反,您必须使用 strcpy(pointer, "", 2)
  • 字符串文字 "" 与字符数组 char arr [2] = {' ', '\0'} 相同。因此像 "\0" 这样的代码没有任何意义。
  • 指向指针的指针不是数组,也不指向数组,也不与数组兼容。有很多不正确的书籍和教程公然教导指针到指针的错误用法。实际上很少有情况需要使用它,二维数组不是其中之一,所以暂时忘记您曾经见过指针到指针。
  • 请注意,*(pointer + n) 100% 等同于pointer[n]。后者更容易阅读,因此请尽可能使用该形式。

关于C、char** 奇怪的输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32623084/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com