小编Tha*_*raj的帖子

在c中初始化字符串数组的最佳方法是什么?

在c中初始化字符串数组的最佳方法是什么?

我尝试过两件事

char arr[10] = "\0";
char arr1[10] = {"\0"};
Run Code Online (Sandbox Code Playgroud)

初始化这些字符串后,我试图在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) 
Run Code Online (Sandbox Code Playgroud)

我想知道哪个是最好的,哪些是优点和缺点.

码:-

int main(){
    char arr[10] = "\0";
    char arr1[10] = {"\0"};

return 0;
}
Run Code Online (Sandbox Code Playgroud)

部件:-

(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>: …
Run Code Online (Sandbox Code Playgroud)

c arrays string

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

结构指针错误

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; }
Run Code Online (Sandbox Code Playgroud)

我尝试运行此程序时出现分段错误.任何人都可以证明这个理由吗?

我也尝试过

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; }
Run Code Online (Sandbox Code Playgroud)

现在我收到的错误就像

funptrinstrct.c: In function `main': funptrinstrct.c:17: error: conversion to non-scalar type requested
Run Code Online (Sandbox Code Playgroud)

对此的回答也是可以理解的.

c struct pointers

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

如何在c中为未知字符串长度分配内存

可能重复:
如何为字符串动态分配内存空间并从用户获取该字符串?

我有一个文件.当从文件中逐行读取时,字符串的长度是未知的,因此如何以有效的方式为未知长度字符串分配内存.

注意:-

文件中的每一行都用"\n"分隔.

编程语言 - c

c string

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

如何为结构中的函数指针成员赋值

struct a
{
  int (*ptr1)();
  int (*ptr2)();
  int data;
};

typedef struct
{
  struct a x;
}all;

int fun1()
{
  return 5;
};

int fun2()
{
  return 9;
};
Run Code Online (Sandbox Code Playgroud)

我可以分配喜欢

all *mem = (all*)malloc(sizeof(all));

mem->x.ptr1 = fun1;
mem->x.ptr2 = fun2;
Run Code Online (Sandbox Code Playgroud)

有没有其他方法来分配这些函数指针?有可能像这样分配吗?

all *mem;

(void **)mem->ptr1[0] = fun1; 
(void **)mem->ptr2[1] = fun2;
Run Code Online (Sandbox Code Playgroud)

c struct pointers function

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

高效的算法来排序文件记录

我有一个文件,其中包含不同长度的记录数.什么是对这些记录进行排序的有效算法.

记录样本:

000000000000dc01 t error_handling 44

0000000dfa01a000 t fun 44

总记录=> 5000编程语言c

我想知道哪种算法适合根据地址对此文件进行排序,以及读取这些记录的有效方法是什么?

c sorting algorithm file data-structures

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

如何在linux中找到不同的内存段起始及其大小

我是linux的新手.我想知道不同段的起始地址和大小(如堆栈,堆,数据等)及其当前用法.

我想知道如何在运行进程和核心转储中找到它们.

提前致谢.

c linux debugging gdb

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

标签 统计

c ×6

pointers ×2

string ×2

struct ×2

algorithm ×1

arrays ×1

data-structures ×1

debugging ×1

file ×1

function ×1

gdb ×1

linux ×1

sorting ×1