В вашем коде есть некоторые исправления. Это может помочь вам. http://flask.pocoo.org/docs/1.0/quickstart/#static-files
изменения в файле app.py
from flask import Flask, render_template, send_from_directory
import json
import plotly
import plotly.graph_objs as go
import numpy as np
app = Flask(__name__, static_url_path='/static')
app.debug = True
@app.route('/')
def index():
return render_template('index.html')
@app.route('/analysis')
def analyse():
count = 500
xScale = np.linspace(0, 100, count)
yScale = np.random.randn(count)
# Create a trace
trace = go.Scatter(
x=xScale,
y=yScale
)
data = [trace]
graphJSON = json.dumps(data, cls=plotly.utils.PlotlyJSONEncoder)
return render_template('analysis.html',
graphJSON=graphJSON)
@app.route('/js/')
def send_js(path):
return send_from_directory('static/js', path)
@app.route('/css/')
def send_css(path):
return send_from_directory('static/css', path)
if __name__ == "__main__":
app.run()
и некоторые исправления в вашем файле index.html
Примечание: Я изменил маршрут CSS на https://colorlib.com , вы можете использовать его локально, чтобы скачать css. файлы css и main.css и добавили их в папку / css .
В идеальном мире это не так. Вы используете char * для строк в стиле C (которые заканчиваются NUL, и вы можете измерить длину), а unsigned char * только для байтовых данных (длина которых указывается в другом параметре или в любом другом месте, и в которые вы, вероятно, попадете контейнер STL как можно скорее, такой как vector
или basic_string
).
Основная проблема заключается в том, что вы не можете делать переносимые предположения о том, представления хранения символов char и unsigned char совпадают. Обычно они есть, но им позволено не быть. Таким образом, нет строковых библиотечных функций, которые работают с unsigned char *, только с char *, и в общем случае небезопасно приводить unsigned char * к знаку char * и обрабатывать результат как строку. Поскольку символ может быть подписан, это означает, что не нужно приводить unsigned char * к char *.
Однако, 0 всегда является одинаковым представлением значения в unsigned char и char. Так что в неидеальном мире, если у вас есть строка в стиле C откуда-то, но она пришла как беззнаковый char *, то вы (a) приводите ее к char * и продолжаете с ней, но также и (b) ) Узнайте, кто сделал это с вами, и попросите их прекратить.
Если вы используете C ++ и в нем есть строка без знака *, лучше сначала поместить его в std :: string, а затем манипулировать им. Таким образом, вы можете делать с ним все что угодно и при этом иметь возможность получать его длину () и / или емкость () в любое время.
Я предполагаю, что вы делаете что-то с указанным массивом для сделать его размер непостоянным. Если вы просто размещаете, устанавливаете и забываете, вы всегда можете сохранить фактический размер размещения массива в отдельной переменной - или, лучше, создать структуру / класс. изобретение std :: string.
For the actual size of the pointer:
size_t s = sizeof(unsigned char*);
If you want the length of the string:
unsigned char* bla = (unsigned char*)"blabla";
int s = strlen((char*)bla);
There could be two meanings to this. Are you just wanting to know how big the pointer type is? If so then Joce's answer is correct
size_t size = sizeof(unsigned char*);
If you're wanting to know how many elements does the pointer point to, that's a bit more complex. If this is a C style string then strlen or some variant is your best option.
However if this is just a pointer to unsigned char which has no relation to a C style string, then there is no way to reliably achieve what you're looking for. C / C++ does not associate a length field with a pointer. You'll need to pass the length around with the pointer or use a class like vector which stores both the pointer and the length.
Вы хотите, чтобы длина указателя была int. Если вам нужна длина строки, на которую указывает, используйте strlen: например Размер указателя: sizeof (unsigned char *) Размер строки: strlen (unsigned char *) Многобайтовые символы будут отображаться как ... многобайтовые
By unsigned char * I suppose you mean the string located at that pointer. In that case it would be:
strlen(your_string_pointer)
However, this will only find the \0 position. There is no garantee this is the actual allocated memory block size.