可能重复:
我是否转换了malloc的结果?
我刚学会了如何使用malloc函数,我的老师提到在将内存地址传递给指针时需要进行类型转换.例如,这是使用malloc获取16个新字节(4个整数)的代码:
#include <stdlib.h>
int main(){
int *p;
p = (int *)malloc(4*sizeof(int));
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我的问题:是否需要在归属的右侧投射(int*)?毕竟p已经是一个指向int的指针,所以即使没有该转换,指针算术也应该正常工作.
谢谢
说我有这样的单词列表:mouse,abba,roar,accent
我需要一个匹配鼠标和咆哮的正则表达式,但不需要abba或重音,因为最后两个具有连续的重复字符(bb和cc).
我设法提出以下模式,以匹配单词WITH双连续字符:
.*(.)\1.*
Run Code Online (Sandbox Code Playgroud)
然而,我需要的是相反的,但我很难反驳它.
我刚刚了解到,在使用malloc函数时,可以增加分配给结构的内存大小.例如,您可以使用这样的结构:
struct test{
char a;
int v[1];
char b;
};
Run Code Online (Sandbox Code Playgroud)
它显然只有2个字符和1个int (实际上指向 int的指针,但无论如何).但你可以用这样的方式调用malloc来使struct保存2个字符和你想要的多个int(让我们说10):
int main(){
struct test *ptr;
ptr = malloc (sizeof(struct test)+sizeof(int)*9);
ptr->v[9]=50;
printf("%d\n",ptr->v[9]);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
此处的输出将在屏幕上打印"50",这意味着结构内部的数组最多可保持10个整数.
我对有经验的C程序员的问题:
幕后发生了什么?计算机是否为标准的"struct test"分配2 + 4(2个字符+指向int的字节)字节,然后为4*9个字节的内存分配,并让指针"ptr"将它想要的任何类型的数据放在那些额外的字节?
这个技巧只在结构中有数组时才有效吗?
如果数组不是结构的最后一个成员,那么计算机如何管理分配的内存块?
我正在参加一些编程竞赛,在许多问题上,需要从输入文件中读取字符串.显然,性能是这些竞争中的一个大问题,字符串可能很大,所以我试图理解读取这些字符串的最有效方法.
我的猜测是,使用getchar()读取char字符串char是最快的.那是因为即使你使用其他函数,比如fgets()或getline(),这些函数仍然需要读取每个char.
更新:我知道I/O不会成为大多数算法问题的瓶颈.话虽如此,我仍然非常想知道什么是你用来读取字符串的最快方法,如果这成为任何未来问题的问题.
我正在尝试检查某个域是否存在.我的想法是用file_get_contents()读取内容,并检查它是成功还是失败.
$line = file_get_contents('http://www.domain.com');
if ($line==false)
echo 'Domain is dead';
else
echo 'Domain is live';
Run Code Online (Sandbox Code Playgroud)
我遇到的问题是,当它失败时,它会在网页上输出警告.通过PHP配置关闭所有警告不是一个选项,因为我需要在其他一些部分.有没有办法让这个单一语句不输出警告?
或者有更好的方法来检查域名是否有效?我试过checkdnsrr()但它很慢.
假设我有一个这样的对象:
Public Class Test{
int a;
}
Run Code Online (Sandbox Code Playgroud)
在我的程序中的某个时刻,我想检查是否设置了属性a.我知道,如果我用了不是int,因为我可以做类似属性的整数类型:
if(test.a!=null)
...;
Run Code Online (Sandbox Code Playgroud)
但是如果我将int保留在那里并使用它来检查:
if(test.a!=0)
...;
Run Code Online (Sandbox Code Playgroud)
一个问题是我无法区分零值和未设置值,但在我的程序中它们是相同的,因为有效值都不同于0.此外,使用int简化了我以后需要做的事情在,比如使用==.
那么在这里使用int会没用,或者总是首选Integer?
我有一个非常简单的 PHP 脚本,用于发出 POST 请求。代码如下:
$ch = curl_init();
curl_setopt($ch,CURLOPT_URL, $url);
curl_setopt($ch,CURLOPT_POST, 1);
curl_setopt($ch,CURLOPT_POSTFIELDS, $fields);
curl_setopt($ch,CURLOPT_RETURNTRANSFER, true);
$result = curl_exec($ch);
curl_close($ch);
mail('myemail@gmail.com','Script run with success','Script run with success',$headers);
Run Code Online (Sandbox Code Playgroud)
当我从浏览器执行它时,它工作正常。但是,当我尝试将其作为 cron 作业执行时,Curl 部分将不起作用。脚本的其余部分甚至可以作为 cron 作业运行,因为我在最后收到了确认电子邮件。
这是 cron 条目:
*/5 * * * * /usr/bin/php /home/username/scripts/test.php
Run Code Online (Sandbox Code Playgroud)
关于为什么 Curl 没有作为 cron 作业执行的任何线索?
更新:我尝试通过 shell 运行脚本,但 Curl 部分也无法运行。所以:
更新 2:在通过 shell 运行时添加 -dsafe_mode=Off 使脚本运行良好。但是,将相同的标志添加到 cron 条目并没有做任何事情。所以我仍然需要弄清楚如何从 cron 让它工作。
我现在正在阅读"Head First PHP&MySQL"一书,在本书的许多部分中都有用于处理HTML表单的代码片段.他们这样开始:
if (isset($_POST['submit'])){
...
}
Run Code Online (Sandbox Code Playgroud)
if子句用于检测表单是否已经提交.习惯于在C中编程,我发现构造冗余且烦人(我也认为它不会帮助有经验的程序员编写可读性).我宁愿把它写成:
if ($_POST['submit']){
...
}
Run Code Online (Sandbox Code Playgroud)
问题:在这种情况下我是否还有其他原因可以使用isset()?我的代码片段是否会被视为非惯用PHP?那么在其他情况下,你能给我一个关于isset()何时有用的例子吗?
我正在开发一个网络应用程序,供餐馆使用,让收银员访问有关客户,预订等的数据.
不过,我的一位测试客户表示,他希望只有当他们在餐厅电脑上时才允许收银员访问网络应用程序.换句话说,他不希望他的员工能够登录网络应用程序并从他们的家中或从其他位置/计算机访问客户信息.
我的第一个想法是在Web应用程序上检查客户端的IP地址,并且只允许某些IP(即餐馆连接的IP)访问它.
问题是大多数餐馆的互联网连接使用DHCP,因此他们的IP不断变化.我只能检查IP的前2个字节(例如,106.280),但这不是100%安全的,在某些ISP上,即使第二个字节也会不时变化.
关于如何解决这个问题的任何其他想法?
提前致谢.
我为ARM写了一个"Hello World"程序,它运行正常.一旦我重复printf调用(两次打印"Hello World"),程序就开始给出"分段错误".
这是双printf调用的代码:
.extern printf
.global main
main:
push {ip,lr}
ldr r0, =test
bl printf
bl printf
mov r0, #0
pop {ip,pc}
test: .asciz "hello world\n"
Run Code Online (Sandbox Code Playgroud)
有关原因以及如何解决的任何线索?