根据这部电影(约38分钟),如果我有两个具有相同本地变量的函数,它们将使用相同的空间.所以下面的程序应该打印出来5.用gcc结果编译它-1218960859.为什么?
该程序:
#include <stdio.h>
void A()
{
int a;
printf("%i",a);
}
void B()
{
int a;
a = 5;
}
int main()
{
B();
A();
return 0;
}
Run Code Online (Sandbox Code Playgroud)
根据要求,这是反汇编程序的输出:
0804840c <A>:
804840c: 55 push ebp
804840d: 89 e5 mov ebp,esp
804840f: 83 ec 28 sub esp,0x28
8048412: 8b 45 f4 mov eax,DWORD PTR [ebp-0xc]
8048415: 89 44 24 04 mov DWORD PTR [esp+0x4],eax
8048419: c7 04 24 e8 84 04 08 mov …Run Code Online (Sandbox Code Playgroud) 假设我正在用C编写一个小库 - 比如一些数据结构.如果我无法分配内存,该怎么办?
这可能非常重要,例如我需要一些内存来初始化数据结构,或者我正在插入一个键值对并希望将它包装在一个小结构中.它也可能不太重要,例如类似于pretty_print构建内容的良好字符串表示的函数.然而,它通常比你的平均错误更严重 - 可能没有任何意义继续下去.malloc如果返回,大量的在线样本使用直接退出程序NULL.我猜很多真正的客户端代码也会这样做 - 只是弹出一些错误,或写入stderr并中止.(而且很多真正的代码可能根本不检查返回值malloc.)
有时回归是有意义的NULL,但并非总是如此.错误代码(或只是一些布尔success值),无论是返回值还是输出参数都可以正常工作,但似乎它们可能会混乱或损害API的可读性(那么,可能在C语言中有点期待?) .另一种选择是让调用者可以随后查询某种内部错误状态,例如使用get_error函数,但是你必须小心线程安全,并且可能很容易错过; 无论如何,人们往往会对检查错误松懈,如果它完全是一个单独的功能,他们可能不知道它,或者他们可能不会打扰(但我猜这是他们的问题).
(我有时看到malloc包裹在一个函数中,只是再次尝试,直到内存可用...
void *my_malloc(size_t size)
{
void *result = NULL;
while (result == NULL)
result = malloc(size);
return result;
}
Run Code Online (Sandbox Code Playgroud)
但这似乎有点愚蠢,也许很危险.)
处理这个问题的正确方法是什么?
我有像下面这样的python列表
documents = ["Human machine interface for lab abc computer applications",
"A survey of user opinion of computer system response time",
"The EPS user interface management system",
"System and human system engineering testing of EPS",
"Relation of user perceived response time to error measurement",
"The generation of random binary unordered trees",
"The intersection graph of paths in trees",
"Graph minors IV Widths of trees and well quasi ordering",
"Graph minors A survey"]
Run Code Online (Sandbox Code Playgroud)
现在我需要阻止它(每个单词)并得到另一个列表.我怎么做 ?
我有一个奇怪的问题,itertools.groupby用于分组查询集的元素.我有一个模特Resource:
from django.db import models
TYPE_CHOICES = (
('event', 'Event Room'),
('meet', 'Meeting Room'),
# etc
)
class Resource(models.Model):
name = models.CharField(max_length=30)
type = models.CharField(max_length=5, choices=TYPE_CHOICES)
# other stuff
Run Code Online (Sandbox Code Playgroud)
我的sqlite数据库中有几个资源:
>>> from myapp.models import Resource
>>> r = Resource.objects.all()
>>> len(r)
3
>>> r[0].type
u'event'
>>> r[1].type
u'meet'
>>> r[2].type
u'meet'
Run Code Online (Sandbox Code Playgroud)
因此,如果我按类型分组,我自然会得到两个元组:
>>> from itertools import groupby
>>> g = groupby(r, lambda resource: resource.type)
>>> for type, resources in g:
... print type
... for resource …Run Code Online (Sandbox Code Playgroud) 我一直试图找到有关此设置的信息,但没有太多.有人可以解释一下这个设置是什么吗?我应该在生产中把它关闭吗?...只是想了解它,也许我在django中遗漏了一些重要的东西.
(我用django 1.6)
假设我有一个脚本可以对文件进行一些操作.它在命令行中使用此文件的名称,但如果未提供,则默认为已知文件名(content.txt例如).使用python argparse,我使用以下内容:
parser = argparse.ArgumentParser(description='my illustrative example')
parser.add_argument('--content', metavar='file',
default='content.txt', type=argparse.FileType('r'),
help='file to process (defaults to content.txt)')
args = parser.parse_args()
# do some work on args.content, which is a file-like object
Run Code Online (Sandbox Code Playgroud)
这非常有效.唯一的问题是,如果我运行python myscript --help,我得到一个ArgumentError如果文件不存在(我猜有意义),并且不显示帮助文本.我宁愿它不试图打开文件,如果用户只是想要--help.有没有办法做到这一点?我知道我可以把参数作为一个字符串,并在以后自己打开文件(我一直这样做),但是argparse照顾它会很方便.
我有一段代码可以在java 7下编译,但不是在java 8下编译.这是一个独立的再现示例(我已经采用了真正的代码来展示这个问题并且删除了所有的实现):
import java.util.Iterator;
class ASTNode<T extends ASTNode> implements Iterable<T> {
@Override public Iterator<T> iterator() { return null; }
}
class List<T extends ASTNode> extends ASTNode<T> {}
interface Function<F, T> {}
class Iterables {
public static <F,T> Iterable<T> transform(
Iterable<F> fromIterable, Function<? super F, ? extends T> function) { return null; }
}
class AstFunctions {
public static <T extends ASTNode<?>> Function<T, String> prettyPrint() { return null; }
}
public class Main {
public static void test() {
List<? …Run Code Online (Sandbox Code Playgroud) 我问这个关于Go的问题encoding/json,但我想它也适用于将JSON blob映射到任何语言的对象的任何其他JSON库.
这是一个例子.如果您想使用goo.gl URL缩短程序API缩短URL,则可以获得成功的响应:
{
"kind": "urlshortener#url",
"id": "http://goo.gl/fbsS",
"longUrl": "http://www.google.com/"
}
Run Code Online (Sandbox Code Playgroud)
或错误响应:
{
"error": {
"errors": [
{
"domain": "global",
"reason": "required",
"message": "Required",
"locationType": "parameter",
"location": "resource.longUrl"
}
],
"code": 400,
"message": "Required"
}
}
Run Code Online (Sandbox Code Playgroud)
有没有一种惯用的处理方式 - 一种可以遵循两种完全不同的模式的响应?
通常我使用地图/列表来处理JSON; 我知道Go中有可能.我可以解组到a map[string]interface{},然后检查地图是否"error"有关键.但是我觉得我必须再次解码成一个合适的struct.(我错了吗?)
我正在做这样的事情.我对每种响应都有一种类型:
type successResponse struct {
Kind string
Id string
LongUrl string
}
type errorResponse struct {
Error struct {
Errors []struct {
Domain string
Reason string
Message string …Run Code Online (Sandbox Code Playgroud) 我不知道在哪里寻求有关Java API文档和Java代码的澄清和确认,所以我在这里做.
在API文档中FileChannel,我发现在一个以上的地方提交文件position和文件的一个一个错误size.
这只是一个例子.transferFrom(...)州的API文件:
"如果给定位置大于文件的当前大小,则不传输任何字节."
我确认OpenJDK代码也包含此代码...
public long transferFrom(ReadableByteChannel src, long position, long count)
throws IOException
{
// ...
if (position > size())
return 0;
// ...
}
Run Code Online (Sandbox Code Playgroud)
...在FileChannelImpl.java与文档一致的文件中.
现在,虽然上面的代码片段和API文档看起来相互一致,但我觉得"上面应该'大于或等于'而不仅仅是'大于',因为position它是一个基于0的文件数据索引,阅读时position == size()将没有数据返回给来电者!(position == size() - 1至少1个字节 - 文件的最后一个字节 - 可以返回给调用者.)
以下是同一API文档页面中的其他类似实例:
position(...):"将位置设置为大于文件当前大小的值是合法的,但不会更改文件的大小." (应该是'大于或等于'.)
transferTo(...):"如果给定位置大于文件的当前大小,则不传输任何字节." (应该是'大于或等于'.)
read(...):"如果给定位置 …