所以我有一个有趣的问题:我有一个字符串,在大多数情况下我知道会发生什么:
http://www.someurl.com/st= ????????
除了在这种情况下,?是大写字母或数字.问题是,字符串有垃圾混合:字符串分为5或6块,中间有很多垃圾:不可打印的字符,外来字符,以及普通的旧普通字符.简而言之,看起来像这样的东西:Nyþ=mî;ëMÝ×nüqÏ
通常最后8个字符(?的)最后都在一起,所以目前我只有PHP抓住最后8个字符并希望最好.偶尔,这不起作用,所以我需要一个更强大的解决方案.
问题在技术上是无法解决的,但我认为最好的解决方案是从字符串末尾抓取字符,而它们是大写或数字.如果我得到8或更多,假设是正确的.否则,找到st =并抓取前进的字符,尽可能多地填写8个字符的配额.有没有正则表达式的方法来做这个或我需要卷起我的袖子,并采取嵌套循环风格?
更新:
为了消除一些困惑,我得到一个输入字符串,如下所示:
[garbage]http:/[garbage]/somewe[garbage]bsite.co[garbage]m/something=[garbage]????????
Run Code Online (Sandbox Code Playgroud)
除了垃圾是在字符串中不可预测的位置(除了结尾永远不是垃圾),并且具有不可预测的长度(至少,我已经能够找到两者中的模式).通常这些都是?因此我只抓住最后8个字符,但有时它们不会导致一些丢失的数据并返回垃圾: - \
从http://java.sun.com/docs/books/performance/1st_edition/html/JPAppGC.fm.html#99740示例 A3.3 说,它说一个对象可能仍然不可用于垃圾收集,即使它可能超出范围。仅当该方法脱离堆栈时才可用。现在,如果我们考虑以下情况:
void foo(){
Dog a = new Dog();
Dog b = new Dog();
b=a
while(true)//loop for long time
}
Run Code Online (Sandbox Code Playgroud)
引用的对象 b 是否可以立即用于垃圾回收,还是仅在返回 foo() 方法之后。
我一直在教自己C++,有人告诉我C++没有垃圾收集器.现在我不确定这意味着什么程度.
让我说我有这个代码:
double multiply (double a, double b) {
double result = a * b;
return result;
};
int main (char* args[]) {
double num1 = 3;
double num2 = 12;
double result = multiply(num1, num2);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
乘法方法包含内部变量"result".现在是仍然分配和/或锁定变量"result"的内存地址?参数"a"和"b"怎么样?
为什么以下程序不打印垃圾值.据我所知,数组在堆栈上分配内存(即在编译时)和堆栈内存包含一些垃圾值.但它不是打印垃圾值.它打印1.只有当函数g(),数组b的大小>数组a的大小时才会打印垃圾值.当数组大小为g()>数组a的大小时,则打印12 1(在这种情况下)并作为垃圾值休息.
void f()
{
int a[12],i=0;
for(i=0;i<12;i++)
a[i]=1;
}
void g()
{
int b[12],i=0;
for(i=0;i<12;i++)
printf("%d\n",b[i]);
}
int main()
{
f();
g();
return 0;
}
Run Code Online (Sandbox Code Playgroud)
分配给数组b的内存是否与之前分配给数组a的内存相同?
#include<stdio.h>
void foo(){
int i;
printf("%d\n",i); //should print garbage value
}
void main(){
foo();
}
Run Code Online (Sandbox Code Playgroud)
foo应打印垃圾值i.但相反,它打印为零.这是为什么?我使用的是gcc版本4.9.2.
我想创建一个字母表的char数组.我看了这篇文章:
这说:
char[] alphabet = "abcdefghijklmnopqrstuvwxyz".toCharArray();
所以在我的代码中我有:
public class Alphabet {
private char[] letters = "ABCDEFGHIJKLMNOPQRSTUVWXYZ".toCharArray();
public String availableLetters(){
return letters.toString();
}
}
Run Code Online (Sandbox Code Playgroud)
当我从main()和printit调用函数availableLetters()到控制台时,它输出这个垃圾:
[C@15db9742
我究竟做错了什么?
据我所知,Java没有任何管理内存的方法,因为整个内存管理是由内置的自动运行的垃圾收集器完成的,在某些情况下这可能有点低效.
我找到了这个网站,它告诉他们正在制作一个java工具和库,它们可以在没有任何垃圾的情况下工作.我想得到一些关于如何可行的合理解释.
我使用默认的垃圾收集器(G1GC)运行java应用程序。我不知道 G1CC 何时确切释放内存。我看到应用程序使用了htop它。700M我这样做后,jcmd <pid> GC.run它下降到大约250M。这是否意味着 GC 不会自行执行此操作?
我有一个包含3个节点指针和2个整数的节点类.我分配了所有节点new,但是当我调用delete它们时,整数被设置为-17891602并且它会搞砸我代码的其余边界检查.会导致delete这样做的原因是什么?
我正在尝试使用 C 中的 memcpy() 创建一个通用交换函数。当我尝试交换数组时,我得到了一个垃圾值。
这是下面的代码:
#include<stdio.h>
#include<string.h>
typedef struct Student
{
char a[10];
int b;
double c;
} Student;
void swap(void* one, void* two,size_t size)
{
char temp[size] ;
memcpy(temp,two,size); // temp = *two;
memcpy(two,one,size);//*two = *one;
memcpy(one,temp,size);//*one = temp;
}
int main()
{
int i1 = 10, i2 = 20;
float f1 = 1.6, f2 = 8.9;
int a1[3] = {1, 2, 3}, a2[3] = {10, 20, 30};
Student s1 = {"Mark", 42, 5.2}, s2 = {"Bilal", 9, …Run Code Online (Sandbox Code Playgroud) 我理解不同垃圾收集器和JVM开发人员之间的基准测试用途.
此外,对于不会产生垃圾的极其高效的程序,没有垃圾收集器也很有用,对于非常短暂的程序也是如此.
这个垃圾收集器有哪些其他用例?
我已经编写了一个代码来打印2个工人的名字,但它会打印垃圾.
cout << "highest salary: " << highestSalary.getID() << " " << highestSalary.getName() << endl;
cout << "hardest worker: " << mostHours.getID() << " " << mostHours.getName();
Run Code Online (Sandbox Code Playgroud)
函数getName()在worker类中定义为:
char* Worker::getName()
{
char temp[20];
int i;
strcpy(temp, name);
return temp;
}
Run Code Online (Sandbox Code Playgroud)
在调试器上经历这一点我尝试将最高级别的帐户放入一个ver char*temp中,并且值是我预期的,让我们说"bob",但是在cout之后值为""和cout印刷垃圾.