小编pou*_*ler的帖子

在"重定位具有无效符号索引"错误期间会发生什么?

这是一个重现问题的测试:

$ echo "void whatever() {}" > prog.c
$ gcc prog.c
Run Code Online (Sandbox Code Playgroud)

这会在GCC 4.8.4上产生以下错误:

    /usr/bin/ld: /usr/lib/debug/usr/lib/x86_64-linux-gnu/crt1.o(.debug_info): relocation 0 has invalid symbol index 11
    /usr/bin/ld: /usr/lib/debug/usr/lib/x86_64-linux-gnu/crt1.o(.debug_info): relocation 1 has invalid symbol index 12
    /usr/bin/ld: /usr/lib/debug/usr/lib/x86_64-linux-gnu/crt1.o(.debug_info): relocation 2 has invalid symbol index 2
    /usr/bin/ld: /usr/lib/debug/usr/lib/x86_64-linux-gnu/crt1.o(.debug_info): relocation 3 has invalid symbol index 2
    ... etc ...
    /usr/bin/ld: /usr/lib/debug/usr/lib/x86_64-linux-gnu/crt1.o(.debug_info): relocation 18 has invalid symbol index 13
    /usr/bin/ld: /usr/lib/debug/usr/lib/x86_64-linux-gnu/crt1.o(.debug_info): relocation 19 has invalid symbol index 21
    /usr/bin/ld: /usr/lib/debug/usr/lib/x86_64-linux-gnu/crt1.o(.debug_line): relocation 0 has invalid symbol index 2
    /usr/lib/gcc/x86_64-linux-gnu/4.8/../../../x86_64-linux-gnu/crt1.o: …
Run Code Online (Sandbox Code Playgroud)

c gcc

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

MediaPlayer,ProgressBar

这是播放媒体时更新ProgressBar的正确方法吗?我想在MediaPlayer中会有一个回调,但我找不到它.

mediaPlayer.start();
final SeekBar progress = (SeekBar) dialog.findViewById(R.id.seekBar1);
progress.setMax(mediaPlayer.getDuration());
new CountDownTimer(mediaPlayer.getDuration(), 250) {
  public void onTick(long millisUntilFinished) {
    progress.setProgress(progress.getProgress() + 250);
  }
  public void onFinish() {}
}.start();
Run Code Online (Sandbox Code Playgroud)

最好的祝福.

android seekbar

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

如何使用 mblen()?

这是一些测试代码,可以帮助我理解多字节字符管理。

\n\n
#include <stdio.h>\n#include <stdlib.h>\n#include <string.h>\n\nint main(int argc, char *argv[]) {\n    char * line = malloc(1024);\n    size_t n;\n\n    getline(&line, &n, stdin);\n    while (*line) {\n        int offset = mblen(line, strlen(line));\n        if (offset == -1) return 0;\n        printf("%d\\n", offset);\n        line += offset;\n    }\n    return 0;\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n

据我了解,如果用户在哪里输入“\xc3\xa9l\xc3\xa9phant”,我的输出应该显示 2 1 2 1 ...\n但是,它从第一个字节开始显示 -1 表示 mblen 错误.\n我收集到这可能是这两行代码中的错误,我必须做什么,我可以阅读哪些资源,才能获得有关此处发生的情况的提示?\n当然是 printf("%s", line )会(并且确实)完美地工作。

\n

c

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

在C中读取和输出unicode

FILE * f = fopen("filename", "r");
int c;

while((c = fgetc(f)) != EOF) {
    printf("%c\n", c);
}
Run Code Online (Sandbox Code Playgroud)

你好,我已经搜索了整整一个小时,发现了许多关于Unicode的明智论文,但没有回答这个简单的问题:

什么是这四行的最短等价物,可以在Linux上使用gcc和bash管理UTF8.

谢谢

c

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

strcasecmp NULL 参数;man strcasecmp

我做了一个 sigsegved 的小程序,strcasecmp直到我做了这个测试用例才知道为什么:

strcasecmp(NULL, "TEST"); 
Run Code Online (Sandbox Code Playgroud)

编译时,它给了我以下警告:

test.c:9:4: warning: null argument where non-null required (argument 1) [-Wnonnull]
Run Code Online (Sandbox Code Playgroud)

但是,man strcasecmp没有说任何关于NULL论点的内容,有人可以解释一下我如何从理论上从阅读文档中推断出这一点,而不是凭经验编写测试用例吗?它是根深蒂固的标准吗?或者也许const char *没有权利成为NULL,出于某种我不知道的原因?

c string

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

万无一失的分叉?

我的C类包含一个非常小的shell.

我们的shell检查用户的输入行是否有内部命令(如cd或exit),如果没有找到,则forks()和execs()输入行.

我希望实现一个万无一失的分叉(这超出了本课程的职责范围,请不要让我做自己的功课,这更多的是个人研究,以了解更多的linux'内部) .我目前的做法是:

t = fork();             
if (t < 0) {            
  if (errno == ENOSYS) {                                
    printf("fork() is not supported on this platform. Minishell will not work.");
    break;
  }
  else if (errno == ENOMEM) {   
    printf("No free kernel memory. Minishell will exit.");
    break;
  }
  else {        
    int try = 0;
    while (t < 0 && try < 10) {
      try++;
      t = fork();
    }
  }
  continue;
}
Run Code Online (Sandbox Code Playgroud)

我的理解是ENOSYS不允许分叉,因此我们退出,ENOMEM表示内核内存故障 - 超过我的薪水(我没有报酬,我是学生;)),因此我们也退出.保持EAGAIN有两种风格,这两种风格都可以通过等待和再次调用fork()来解决.

在之前的练习中,我们已经启动了一万个叉子,如果我没记错的话,大约1500个失败了,直到我们实现了一个类似于我的计数器.如果我想以一种不那么天真的方式实现这个东西,我该怎么办?我想,特别是硬编码的十次尝试有点愚蠢.

谢谢.

c fork

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

FILE*不是左值吗?

在这种情况下,我试图破译我的第一个大型程序,即LISP解释器.我对理解别人的代码的世界完全陌生,而且它似乎远比编码自己复杂得多.

我几乎无法生成当前难度的最小版本,因为我目前的难度在于最小化现有代码以便更好地掌握它,并且我在每次修改时都会遇到错误.

解释器使用Current_Input和Current_Output全局变量来抽象读取和写入文件和小部件.我只是想让它写入stdout.

相关的路线是:

Current_Output = alloc_objet(sizeof(Widget *));
objet_type(Current_Output) = OWIDGET;
Owidget(Current_Output) = Wtext;
Run Code Online (Sandbox Code Playgroud)

分配一个对象(超级类型),告诉它真正的类型是"WIDGET",并为其分配Widget Wtext.

OFILE类型已经存在,并且有一个类似于Owidget宏的宏Ofile,这里有两个:

#define Owidget(objet) (* ((output_widget) objet + JMP))
#define Ofile(objet) ((FILE *) objet + JMP)
Run Code Online (Sandbox Code Playgroud)

我想更换三条相关的线路:

Current_Output = alloc_objet(sizeof(FILE *));
objet_type(Current_Output) = OFILE;
Ofile(Current_Output) = stdout;
Run Code Online (Sandbox Code Playgroud)

这会产生以下错误:

error: lvalue required as left operand of assignment Ofile(Current_Output) = stdout;
Run Code Online (Sandbox Code Playgroud)

这一行:

printf("%d", Ofile(Current_Output));
Run Code Online (Sandbox Code Playgroud)

产生此警告:

warning: format ‘%d’ expects argument of type ‘int’, but argument 2 has type ‘FILE* {aka _IO_FILE*}’ [-Wformat=]
Run Code Online (Sandbox Code Playgroud)

让我相信我在烦扰线的左侧有一个文件*,我想要分配标准输出,另一个文件*.

这有什么不对?谢谢!

c++

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

功能原型设计的优点

经过半个小时的互联网研究,我找不到任何有关功能原型设计优势的合理讨论.

我在Java/Android中管理,并开始了C课程.与我之前的经验相比,原型设计看起来很麻烦,我想知道它为什么在2013年仍然存在的原因.

我知道里奇和好朋友的生活更加困难; 但是,今天可以编写一个编译器,它会在第一次传递中生成一个函数列表,然后使用该函数列表执行常规操作,因为当前编译器将使用头文件.

它可能不会仅仅因为向后兼容性而持久存在.创建一个可以在当前操作模式和我刚才描述的假设新模式之间切换的编译器是可行的,具体取决于它所显示的代码.

如果原型设计仍然存在,那么它必须对程序员有兴趣,而不是编译器程序员.我是对还是错 - 在哪里可以找到有关功能原型设计与无原型设计优势的合理讨论?

c function-prototypes

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

是否有比(1)......更干净的方式更清洁的方式?

此应用程序匹配两个单词列表,一个在字典文件中,一个由TreeSet中的应用程序生成.也许有更好的方法来做到这一点,但它超出了这个问题的范围 - 我们使用的方法是从文件读取一行,从TreeSet读取一行,比较它们和

如果TreeSet行等于文件行,则保存

如果TreeSet行>文件行,则从文件中读取一行

如果文件行> TreeSet行,则从TreeSet读取一行

在伪代码中:

while (1) {
    String dict = reader.readLine();
    if (dict == null || !TreeIterator.hasNext()) break;
    if (dict.equals(TreeIterator.next())...save
    elseif > .... read tree
    elseif < .... read file
}
Run Code Online (Sandbox Code Playgroud)

在(1)中使用它似乎不正确,但我没有找到更清晰的方式来表达这种双重条件.没有办法在while条件下读取两个字符串,有吗?是否有可能保持这种方法的简单性(不再杂乱),同时失去奇怪的同时(1)?

最好的祝福.

java

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

正则表达式与解析引擎

您好我正在建立一个关于我的图书集的事实数据的数据库,即标题,页数,宽度,长度,作者,作者出生日期,出版商名称,出版商地址等.为此,我输入了ISBN,应用程序从Web获取该信息.从我自己定义的几个网站中,我知道其中包含我需要的所有信息.目前,这是3个站点,很可能永远不会超过5个站点.在每个网站上,我CURL一个搜索页面,其中isbn作为查询参数,提取搜索页面显示的链接,然后CURL这些链接并提取上述信息(出生,标题,出版商等...)他们.因此,我的抓取程度是3 x(搜索页面+信息页面)= 6个HTML页面.

这些页面都以荒唐的方式呈现相关信息.例如,发布者信息在一个HTML标记中包含地址,电话,电子邮件,网站,其中brs为分隔符.有些发布商没有这些字段中的一个,因此它甚至不总是相同数量的brs.这些网站中的另一个对于大多数信息都有lis,但是对于一个字段,p为另一个字段,而div为另一个字段.等等...

我已经成功地使用正则表达式提取了我想要的内容,然后使用DOM解析器.最后,DOM解析器的代码可读性更差,因为需要更多操作来提取信息字段.举个例子:

<li>Né le : 23/12/1990 (ANGLETERRE)</li>
Run Code Online (Sandbox Code Playgroud)

对于男性作者的出生日期,也可以出现在女性作者身上

<li>Née le : 11/07/1832</li>
Run Code Online (Sandbox Code Playgroud)

使用DOM解析器,我需要获取lis列表,这是不够的,因为一些重要信息在ap,div和a中.然后对于每个li,我需要检查li是否包含"Néle"或"Néele",这是ifs还是正则表达式 - 检查是否有一个括号出生地,并提取它,即至少两个以上的行动.使用正则表达式,我可以在一行代码中获得它.

而且,解析器究竟是如何构建的呢?底层代码是否有正则表达式,还是其他的?如果是这样的话,我认为在使用解析引擎时,与快速和脏的正则表达式有很高的性能成本?

所以这是我的两个询问,如何构建DOM解析器,它是否具有底层正则表达式?其次,对于我解析六到十页的非常有限的范围,主要是供我个人使用,我不应该考虑代码可读性(并且性能取决于第一个问题)?

此致,塞巴斯蒂安

regex html-parsing

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

ImageView尺寸错误

编辑:部分答案

例如,如果在xml中设置了两个维度,则其行为与预期相同

android:layout_width="250dp"
android:layout_height="250dp"
Run Code Online (Sandbox Code Playgroud)

如果留给wrap_content,则不会.

原帖

这是我的布局:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:orientation="horizontal" >

<ImageView
android:id="@+id/board"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:src="@drawable/board" />

</LinearLayout>
Run Code Online (Sandbox Code Playgroud)

为什么我在屏幕上看到的图像具有正确的尺寸(屏幕高度x屏幕高度,因为它是方形位图,我设置match_parent为高度),但是如果我调用ImageView.getWidth()和ImageView.getHeight()它给了我屏幕尺寸?

最好的祝福

layout android

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

标签 统计

c ×6

android ×2

c++ ×1

fork ×1

function-prototypes ×1

gcc ×1

html-parsing ×1

java ×1

layout ×1

regex ×1

seekbar ×1

string ×1