在c中初始化字符串数组的最佳方法是什么?
我尝试过两件事
char arr[10] = "\0";
char arr1[10] = {"\0"};
初始化这些字符串后,我试图在gdb中显示,两者都给出了相同的初始化格式.
(gdb) p arr
$1 = "\000\000\000\000\000\000\000\000\000"
(gdb) p arr1
$2 = "\000\000\000\000\000\000\000\000\000"
(gdb) 
我想知道哪个是最好的,哪些是优点和缺点.
码:-
int main(){
    char arr[10] = "\0";
    char arr1[10] = {"\0"};
return 0;
}
部件:-
(gdb) disass main
Dump of assembler code for function main:
0x00000000004004ec <+0>:    push   %rbp
0x00000000004004ed <+1>:    mov    %rsp,%rbp
0x00000000004004f0 <+4>:    movzwl 0xd5(%rip),%eax        # 0x4005cc
0x00000000004004f7 <+11>:   mov    %ax,-0x10(%rbp)
0x00000000004004fb <+15>:   movq   $0x0,-0xe(%rbp)
0x0000000000400503 <+23>:   movzwl 0xc2(%rip),%eax        # 0x4005cc
0x000000000040050a <+30>: …int d() {return 0;} int i() {return 7;}
struct a { int(*b)(); }c={d};
typedef struct e{ struct a f; }g;
main() { struct e *h; h->f.b = i; }
我尝试运行此程序时出现分段错误.任何人都可以证明这个理由吗?
我也尝试过
int d() {return 0;} int i() {return 7;}
struct a { int(*b)(); }c={d};
typedef struct e{ struct a f; }g;
main() { struct e *h; h = (g)malloc(sizeof(g)); h->f.b = i; }
现在我收到的错误就像
funptrinstrct.c: In function `main': funptrinstrct.c:17: error: conversion to non-scalar type requested
对此的回答也是可以理解的.
我有一个文件.当从文件中逐行读取时,字符串的长度是未知的,因此如何以有效的方式为未知长度字符串分配内存.
注意:-
文件中的每一行都用"\n"分隔.
编程语言 - c
struct a
{
  int (*ptr1)();
  int (*ptr2)();
  int data;
};
typedef struct
{
  struct a x;
}all;
int fun1()
{
  return 5;
};
int fun2()
{
  return 9;
};
我可以分配喜欢
all *mem = (all*)malloc(sizeof(all));
mem->x.ptr1 = fun1;
mem->x.ptr2 = fun2;
有没有其他方法来分配这些函数指针?有可能像这样分配吗?
all *mem;
(void **)mem->ptr1[0] = fun1; 
(void **)mem->ptr2[1] = fun2;
我有一个文件,其中包含不同长度的记录数.什么是对这些记录进行排序的有效算法.
记录样本:
000000000000dc01 t error_handling 44
0000000dfa01a000 t fun 44
总记录=> 5000编程语言c
我想知道哪种算法适合根据地址对此文件进行排序,以及读取这些记录的有效方法是什么?
我是linux的新手.我想知道不同段的起始地址和大小(如堆栈,堆,数据等)及其当前用法.
我想知道如何在运行进程和核心转储中找到它们.
提前致谢.