小编Joh*_*ith的帖子

memmem是GNU扩展的特殊原因吗?

在C中,该memmem函数用于定位存储区中的特定字节序列.它可以被同化strstr,专用于以null结尾的字符串.

是否有任何特殊原因使此函数可用作GNU扩展,而不是直接在标准库中?手册说明:

这个功能在Linux库中被破坏,包括libc 5.0.9; 在那里,针和干草堆参数被互换,并且返回了第一次出现针的末尾的指针.

旧的和新的libc都有错误,如果针是空的,则返回haystack-1(而不是haystack).并且glibc 2.0使情况变得更糟,返回指向haystack的最后一个字节的指针.这在glibc 2.1中得到修复.

我可以看到它经历了几次修复,但我想知道为什么它不像strstr某些发行版那样直接可用(如果不是更多).它是否仍然会带来实施问题?

编辑:动机.如果标准反过来决定它,我不会问这个问题:包括memmem但不是strstr.确实,strstr可能是这样的:

memmem(str, strlen(str), "search", 6);
Run Code Online (Sandbox Code Playgroud)

考虑到在C函数中通常需要数据块和它的长度,但是稍微复杂但仍然是一个非常合乎逻辑的单行.

编辑(2):评论和答案的另一个动机.引用Theolodis:

并非每个函数都是必需的,或者至少是大多数C开发人员,因此它实际上会使标准库变得不必要的巨大.

嗯,我完全同意,在使图书馆更轻,更快的时候,我总是在这里.但那么......为什么两者strncpymemcpy(来自凯尔塔尔的评论)......?我几乎可以问:为什么穷人memmem被"黑色"?

c memory gnu

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

这个(char*)&x cast的行为是否定义明确?

在编写一些C代码时,我遇到了一个小问题,我必须将字符转换为"字符串"(一些内存块,其开头由char*指针给出).

我的想法是,如果sourcestr设置了某个指针(不是NULL),那么我应该将它用作我的"最终字符串",否则我应该将给定charcode转换为另一个数组的第一个字符,然后使用它.

出于这个问题的目的,我们假设变量的类型不能事先改变.换句话说,我不能只将我存储charcode为一个const char*而不是一个int.

因为我倾向于懒惰,所以我想:"嘿,我不能只使用角色的地址并将该指针视为字符串吗?".这是我写的一小段(不要把我的头撞到墙上!):

int charcode    = FOO;   /* Assume this is always valid ASCII. */

char* sourcestr = "BAR"; /* Case #1 */
char* sourcestr = NULL;  /* Case #2 */

char* finalstr  = sourcestr ? sourcestr : (char*)&charcode;
Run Code Online (Sandbox Code Playgroud)

现在我当然试过了,正如我所料,它确实有效.即使有一些警告标志,编译器仍然很高兴.但是,我有这种奇怪的感觉,这实际上是未定义的行为,我不应该这样做.

我认为这种方式的原因是因为char*数组需要以空值终止才能正确打印为字符串(我希望我的是!).然而,我不确定值&charcode + 1是否为零,因此我可能最终会出现一些缓冲区溢出的疯狂.

是否有一个实际的原因,它为什么它正常工作,或者我只是幸运在我尝试时在正确的地方得到零?

(请注意,我不是在寻找其他方式来实现转换.我可以简单地用一个char tmp[2] = {0}变量,并把我的角色在索引0我也可以使用像sprintf或者snprintf,只要我有缓冲区溢出不够细心.有无数的方法,我只是对这个特定的演员操作的行为感兴趣.)

编辑:我看到有几个人称这个hackery,我们要明确:我完全同意你的看法.在释放的代码中我实际上做这个是不够的受虐狂.这只是我好奇;)

c string casting character

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

FOSUserBundle压倒不连贯

我遇到了关于FOSU​​serBundle最重要的可能性的无数问题,并且在使用Twig的继承机制时发现了一些"设计不连贯",我想澄清一下,因为它在某些项目中真的令人不安......

覆盖FOSUserBundle中的模板

从我读过的内容来看,我们应该如何覆盖模板.比方说,登录模板(Security/login.html.twig).首先,我需要覆盖全局FOSUser布局(layout.html.twig').

全球FOSUser布局

{% extends "::layout.html.twig" %}
{% block title %}Page title{% endblock title %}
{% block body %}
    <div id="container">
       {% block fos_user_content %}{% endblock %}
    </div>
{% endblock body %}
Run Code Online (Sandbox Code Playgroud)

titlebody块到HTML引用<title><body>标签(全球).现在,谈到登录本身,这就是我写的内容.

登录表格

{% extends "MyUserBundle::layout.html.twig" %}

{% block fos_user_content %}
    {% if error %}
        <div class="error">{{ error|trans({}, 'FOSUserBundle') }}</div>
    {% endif %}
    <form action="{{ path("fos_user_security_check") }}" method="post">
        <input type="hidden" name="_csrf_token" value="{{ csrf_token }}" />
        <label …
Run Code Online (Sandbox Code Playgroud)

php forms overriding symfony fosuserbundle

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

Webstorm或Dart编辑器.哪一个更成熟

一开始我想标记这不是一个常规的IDE vs IDE问题,因为Dart仍处于初期阶段,而且不是哪个更好,而是哪个更新.

目前只有两个不错的Dart IDE.Dart编辑器和WebStorm.哪一个有更好的Dart开发功能?

我知道Dart编辑器是由负责Dart语言的人制作的,但JetBrains(WebStorm)更加成熟和经验丰富.

任何人都可以列出今天这些IDE之间的差异吗?

webstorm dart dart-editor

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

列出可用的捕获格式

作为V4L的新手,我决定开始使用video4linux2库,以便从C中捕捉相机中的帧(我正在使用带有Ricoh Co.相机的uvcvideo模块).我遵循了几个指南和教程,并设法获得一个正在运行的程序.我的问题主要是关于这个通常的代码行:

struct v4l2_format format = {0};
format.fmt.pix.pixelformat = V4L2_PIX_FMT_MJPEG;
// ...
Run Code Online (Sandbox Code Playgroud)

这是我设置捕获时使用的实际视频格式的地方.如您所见,在此示例中,我使用的是MJPEG(http://lxr.free-electrons.com/source/include/uapi/linux/videodev2.h#L390).即使这可能是一个很好的格式,我的应用程序可能需要简单的RGB格式,我估计每像素像素.出于这个原因,我尝试使用RGB格式常量,如V4L2_PIX_FMT_RGB24.现在由于某种原因...... v4l2不喜欢它.我猜这与硬件有关,但我想尽可能避免MJPEG操作.出于测试目的,我尝试使用其他常量和格式,但无论我做什么,v4l2都不断改变pixelformat字段的值:

xioctl(fd, VIDIOC_S_FMT, &format); // This call succeeds with errno != EINTR.
if(format.fmt.pix.pixelformat != V4L2_PIX_FMT_RGB24){
    // My program always enters this block when not using MJPEG.
    fprintf(stderr, "Format wasn't accepted by v4l2.");
    exit(4);
}
Run Code Online (Sandbox Code Playgroud)

现在我的问题是:有没有办法可以得到一个已接受的视频格式列表(我的意思是,我的相机/ v4l2接受),我可以从中找到除MJPEG以外的其他内容?如果你认为我必须坚持MJPEG,你会推荐我允许我操纵它的任何库,并最终在GUI框架中回退捕获吗?

野蛮人测试代码

我使用以下技巧测试我硬件上的所有可用格式.首先,一些shell脚本来获取所有格式的列表......

grep 'V4L2_PIX_FMT' /usr/include/linux/videodev2.h | grep define | tr '\t' ' ' | cut -d' ' -f2 | sed 's/$/,/g'
Run Code Online (Sandbox Code Playgroud)

...其输出在此C程序中使用:

int formats[] = …
Run Code Online (Sandbox Code Playgroud)

c video-capture mjpeg v4l2

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

如何更改联系表单上的提交按钮字体

从最后的第7行我试图添加一些CSS,但它不会改变按钮上的字体.有没有办法在CSS或PHP中做到这一点?(或者也许是一种在HTML中实际工作的方式)

提前致谢!我真的很陌生.

这是我的代码:

<form name="htmlform" method="post" action="something_sendform.php">
<table width="450px">
</tr>
<tr>
 <td valign="top">
  <label for="first_name">First Name *</label>
 </td>
 <td valign="top">
  <input  type="text" name="first_name" maxlength="50" size="30">
 </td>
</tr>

<tr>
 <td valign="top"">
  <label for="last_name">Last Name *</label>
 </td>
 <td valign="top">
  <input  type="text" name="last_name" maxlength="50" size="30">
 </td>
</tr>
<tr>
 <td valign="top">
  <label for="email">Email Address *</label>
 </td>
 <td valign="top">
  <input  type="text" name="email" maxlength="80" size="30">
 </td>

</tr>
<tr>
 <td valign="top">
  <label for="telephone">Telephone Number</label>
 </td>
 <td valign="top">
  <input  type="text" name="telephone" maxlength="30" size="30">
 </td>
</tr>
<tr>
 <td valign="top"> …
Run Code Online (Sandbox Code Playgroud)

html css webforms

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

声明中有两种或多种数据类型

#include<stdio.h>
#include<conio.h>
#include<string.h>
int main()
{
    struct student
    {
        char name[30];
        int roll_no;
        char add[40];
        char subject[15];
    }
    struct student p;

    printf("Enter the name of student:\t");
    scanf("%s",p.name);
    printf("Enter the roll no. of student:\t");
    scanf("%d",&p.roll_no);
    printf("Enter the address of student:\t");
    scanf("%s",p.add);
    printf("Enter student's subject:\t");
    scanf("%s",p.subject);
    printf("\nThus the name of student is:%s \nHis/her roll no is :%d \n He/she lives    at:%s \t and his subject is:%s",p.name,p.roll_no,p.add,p.subject);
    getch();
}
Run Code Online (Sandbox Code Playgroud)

错误信息是---

13error: two or more data types in declaration of `p'
Run Code Online (Sandbox Code Playgroud)

我正在使用代码块

c struct

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